run是一个处理来自stdin的输入并在stdout上输出结果的文件
我写的时候:
$ ./run < in.json > actual.json
$ diff out.json actual.json
我认为没有区别
所以当我写:
$ ./run < in.json > actual.json | diff out.json actual.json
我希望它返回没有区别 但相反,我得到的是out.json
中的所有内容这两个命令有什么区别?根据我的理解,管道(|)执行左边的命令然后执行右边的命令,所以它们应该是相同的命令
答案 0 :(得分:2)
根据我的理解,管道(|)执行左侧的命令,然后执行右侧的命令,这样它们应该是相同的命令
这是完全错误的。
两个程序同时执行;第一个的输出被重定向到第二个的输入。
这意味着在你的
中$ ./run < in.json > actual.json | diff out.json actual.json
diff
在未写入actual.json
时开始,因此它为空,因此out.json
的所有内容都是新的。
答案 1 :(得分:0)
你可以在./run完成时让差异开始。
./ run&lt; in.json&gt; actual.json; diff out.json actual.json
当你只为你的差异使用actual.json
时,你可以做
diff out.json <(./run < in.json)
编辑:正如@Glenn所建议的,我删除了不相关的例子。