将运行脚本输出重定向到fille时会覆盖以前的输出

时间:2017-10-30 15:14:12

标签: php shell unix

我从控制台运行一个php脚本,在处理时有多个回声,我将脚本输出重定向到文件。 我希望在每次回声后覆盖之前的回声输出。

命令:php script.php> output.json

在第一个echo output.json包含之后 {“property”:“firstValue”}

在第二个echo output.json包含之后 {“property”:“firstValue”} {“property”:“secondValue”} 并且不再是有效的json
我希望在第二个echo ouput.json之后包含 {“property”:“secondValue”}

2 个答案:

答案 0 :(得分:1)

如果希望每个新输出行覆盖最后一行,请一次读取1行:

while IFS= read -r line; do
   printf "%s\n" "${line}" > output.json
done <(php script.php)

答案 1 :(得分:0)

STDOUT无法正常工作。如果你在一个脚本中生成多行,而你只想要最后一行,你可以通过尾部管道输出:

php script.php | tail -1 > output.json

或者您可以在脚本中处理自己编写的文件。类似的东西:

...
file_put_contents('/path/to/file.json', $someOutput);
...
file_put_contents('/path/to/file.json', $someNewOutput);
...
file_put_contents('/path/to/file.json', $someEvenNewerOutput);