从标准输出重定向或管道创建临时文件

从标准输出重定向或管道创建临时文件

某些命令仅输出到 stdout。
有些工具仅适用于文件。
有没有一个命令可以将它们粘合在一起?

人为的简单例子:

diff $(echo 1 | stdout-to-temp-file) $(echo 2 | stdout-to-temp-file)

我的实际用例;目前的解决方法:

git show HEAD:$1 > /tmp/left && meld /tmp/left $1

我的实际用例;期望:

meld $(git show HEAD:$1 | stdout-to-temp-file) $1

我也会在其他一些情况下使用它(即我不是在寻找仅 git 或 meld 的修复)。

答案1

您可以使用<将输出重定向到stdin.

我不知道如何meld工作,但是关于您的 diff 示例,它是如何工作的:

使用临时文件

$ cmd1 > file1.tmp
$ cmd2 > file2.tmp
$ diff file1.tmp file2.tmp

没有临时文件

$ diff <(cmd1) <(cmd2)

请注意,根据您使用的 shell,语法可能会有所不同(我使用的是 ksh88)。

答案2

mktemp将为您创建一个临时文件名。将文件名保存在变量中,并在两个插槽中使用该文件名。

为了更好地解决您的具体问题,请查看git difftool。我有我的设置来使用 meld,它非常棒。

答案3

我从未使用过 meld,但您通常可以使用大多数 cli 实用程序的 - 参数来完成此操作。例如

cat /path/to/left/file | diff /input/from/right/file -

特别是对于您的 meld 命令,您可以尝试以下操作:

git show HEAD:$1 | meld - $1

相关内容