如何将两个命令作为参数传递?

时间:2014-05-22 06:10:55

标签: bash diff pipe

是否可以将两个命令作为参数/参数传递给命令行程序?

我正在使用combineiff程序将差异合并在一起,如:

combinediff patchfile1 patchfile2

工作正常,但我想避免必须首先将差异保存到文件中。传递一个管道工作正常(例如mercurial),但使用两个管道不起作用。这样的事情可能吗?:

combinediff | hg diff 1234 | hg diff 1337

到目前为止,它确实可以使用一个管道,但第二个管道会被忽略。

1 个答案:

答案 0 :(得分:4)

Bash有进程替换。

combinediff <(hg diff 1234) <(hg diff 1337)

这在传统的Bourne shell中不可用;解决方法是为其中一个输入使用临时文件。

tmp=$(mktemp -t combine.XXXXXXX) || fail loudly
trap 'rm $tmp' EXIT
trap 'exit 127' TERM INT
hg diff 1234 >$tmp
hg diff 1337 | combinediff $tmp -

(这预先假定combinediff-理解为标准输入。如果您有/dev/fd/0,那么您就可以像使用常规文件一样使用它,但同样,它会&#39} ; s也不能移植回侏罗纪的Unix。在最坏的情况下,使用两个临时文件。)