相关问题:
这个question最终不需要解析。
这个question有一个不涉及timeout的解决方案,但建议timeout应该在可用的情况下用于此目的。
我的问题是:
此命令不会在foo.txt中生成输出
$ cat foo.sh
#!/bin/sh
sh -c "echo foo; sleep 5; echo bar" | awk '/foo/ {print $1}'
$ timeout 2 ./foo.sh > foo.txt如果我不重定向到foo.txt,我会立即看到foo按预期打印出来。
另一方面,下面的代码按照预期在文件foo.txt中生成"foo“:
$ timeout 2 sh -c "echo foo; sleep 5; echo bar" > foo.txt
$ cat foo.txt
foo有谁知道为什么会发生这种情况,以及如何最好地解决它?这只是一个简单的例子,但我正在运行的导致此问题的实际脚本在命令行上生成了大约100行输出,但如果foo.txt在终止前超时,它也会留空。
发布于 2014-11-18 11:53:05
根据我的经验,这是因为pipe "|“wait "echo foo;sleep 5;echo bar”run complete .So after 5s awk可以获得输出,但超时会在2秒内终止命令,因此无法获得文本。
编辑:
也许这会有帮助,您可以像这样将char (")移到末尾:
$ cat foo.sh
#!/bin/sh
sh -c "echo foo; sleep 5; echo bar | awk '/foo/ {print $1;}'"
$ timeout 2 ./foo.sh > foo.txt
$ cat foo.txt
foo发布于 2014-11-18 11:55:30
我找到了解决这个问题的办法。关键是在awk脚本中添加fflush(),它似乎在缓冲输出:
#!/bin/sh
sh -c "echo foo; sleep 5; echo bar" | awk '/foo/ {print $1; fflush()}'
$ timeout 2 ./foo.sh > foo.txthttps://stackoverflow.com/questions/26984140
复制相似问题