Bash 创建具有特定扩展名的临时文件,并在VS代码中打开它

Bash 创建具有特定扩展名的临时文件,并在VS代码中打开它,bash,macos,visual-studio-code,Bash,Macos,Visual Studio Code,我试图通过管道将bashstdout上的一些输出传输到一个新的临时文件中,并使用VS-code打开该文件 文件内容可能不总是纯文本,但也可能是yaml,我想创建扩展名为yaml的临时文件,以便VS-code使用正确的语言模式 我尝试了这个方法,但最终得到了一个在VS代码中包含txt的文件 cat yaml > $(mktemp $TMPDIR$(uuidgen).yaml) | code - cat yaml只是一个命令示例,该命令可能会将yaml内容写入stdout mktemp--s

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

文件内容可能不总是纯文本,但也可能是
yaml
,我想创建扩展名为
yaml
的临时文件,以便VS-code使用正确的语言模式

我尝试了这个方法,但最终得到了一个在VS代码中包含
txt
的文件

cat yaml > $(mktemp $TMPDIR$(uuidgen).yaml) | code -
cat yaml
只是一个命令示例,该命令可能会将
yaml
内容写入
stdout

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

我找到了一个解决方案:

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

当然可能会有更好的,我很期待。你可以这样做:

TMPDIR='/tmp'#为这个答案的目的给TMPDIR一个值
mktemp“${TMPDIR}/xxxxxxxxxxx_$(uuidgen.yaml”|
xargs-n1-I{}--\
代码--文件uri“file://{}”
  • mktemp“${TMPDIR}/xxxxxxxxxxx_$(uuidgen.yaml”

    将临时文件创建到
    $TMPDIR
    中,文件名包括:
    • 12个随机字母数字混合大小写字母
      更换上外壳
      X
    • 后跟下划线
    • 后跟由
      uuidgen
      命令生成的随机UUID
    • 并以
      .yaml
      扩展名作为后缀
  • | xargs-n1-I{}

    将新创建的临时文件名传递给
    xargs
    ,这将把它转换为参数:
    • -n1
      :每个命令一个参数
    • -I{}
      :用参数替换占位符字符串
      {}
    • --
      xargs
      选项的末尾
  • code--file uri“file://{}”

    code
    xargs
    调用。
    • --文件uri
      打开一个包含给定文件uri的窗口
    • “file://{}”
      :刚刚创建的临时文件的uri。
      xargs
      将用临时文件路径替换
      {}

cat>文件| pipe
是一个不明确的重定向。标准输出不能同时发送到文件和管道。