某些命令仅输出到 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