【问题标题】:Create temporary file with specific extension and open it in VS Code创建具有特定扩展名的临时文件并在 VS Code 中打开它
【发布时间】:2019-09-07 19:25:37
【问题描述】:

我正在尝试将 bash stdout 上的一些输出通过管道传输到一个新的临时文件中,并使用 VS Code 打开该文件。

文件内容可能并不总是纯文本,也可能是 yaml,我想创建带有 yaml 扩展名的临时文件,以便 VS Code 使用正确的语言模式。

我尝试了这个,但我最终得到了一个在 VS Code 中包含 txt 的文件。

cat yaml > $(mktemp $TMPDIR$(uuidgen).yaml) | code -

cat yaml 只是一个可能将yaml 内容写入stdout 的命令的示例。

mktemp --suffix=.yaml 是可行的方法,但 macOS 不支持。

【问题讨论】:

  • cat > file | pipe 是一个模棱两可的重定向。标准输出不能同时进入文件和管道。

标签: bash macos visual-studio-code


【解决方案1】:

我找到了解决办法:

temp=$(mktemp $TMPDIR.XXXXXXXXXXXX.$(uuidgen).yaml) && ls -la > $temp && code $temp

当然可能会有更好的,我很期待。

【讨论】:

    【解决方案2】:

    你可以这样做:

    TMPDIR='/tmp' # Give a value to TMPDIR for the purpose of this answer
    mktemp "${TMPDIR}/XXXXXXXXXXXX_$(uuidgen).yaml" |
      xargs -n 1 -I {} -- \
        code --file-uri "file://{}"
    
    • mktemp "${TMPDIR}/XXXXXXXXXXXX_$(uuidgen).yaml":
      将临时文件创建到 $TMPDIR 中,名称由以下内容组成:
      • 12 个随机字母数字混合大小写字母
        替换大写的X,
      • 后跟下划线_,
      • 后跟由uuidgen 命令生成的随机 UUID,
      • 并以.yaml 扩展为后缀。
    • | xargs -n 1 -I {}:
      将新创建的临时文件名传递给xargs,这会将其转换为参数:
      • -n 1:每个命令一个参数
      • -I {}:用参数替换占位符字符串{}
      • --:xargs 选项结束。
    • code --file-uri "file://{}":
      code 由 xargs 调用。
      • --file-uri <uri> 使用给定的文件 uri(s) 打开一个窗口
      • "file://{}":刚刚创建的临时文件的 uri。
        xargs 将用临时文件路径替换 {}。

    【讨论】:

      猜你喜欢
      • 2012-02-16
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      相关资源
      最近更新 更多