管道和重定向奇怪的结果

时间:2014-06-09 11:45:55

标签: shell command-line pipe io-redirection

考虑2个json文件:

fileA.json

{
  "foo": "hey",
  "bar": "ola"
}

fileB.json

{
  "foo": "hoy"
}

,执行:

% cat fileA.json fileB.json | json

返回

{
  "foo": "hoy",
  "bar": "ola"
}

确定

-

现在为什么在将stdout重定向到fileB.json时,我得到了:

% cat fileA.json fileB.json | json > fileB.json

我明白了:

{
  "foo": "hey",
  "bar": "ola"
}

即:fileA.json ???

PS:json实用程序位于:http://trentm.com/json

1 个答案:

答案 0 :(得分:3)

shell设置输出重定向> fileB.json,因此它会在fileB.json开始读取之前打开并截断cat。这会导致cat读取空文件。 (它甚至可能最终读取部分写入的输出数据。)

永远不要读取和写入管道中的同一文件。请尝试使用> fileC.json之类的内容。