我正在获取一个脚本的输出,然后将此输入传递给 grep 并将 grep 的输出传递给另一个脚本:
./script1 | grep 'expr' | ./script2
Run Code Online (Sandbox Code Playgroud)
但是,第二个脚本永远不会得到任何输入。同样,没有被印刷时,我代替script2用cat和script1有ping:
ping localhost | grep localhost | cat
Run Code Online (Sandbox Code Playgroud)
如果我替换grep为awk:
ping localhost|awk '{print $1}'|cat
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?
grep 正在缓冲(因为它确定其输出不是终端;严格来说,这是 C 库的行为)。
要禁用它,请运行它unbuffer -p(从其标准输入中读取-p是必需的unbuffer):
ping localhost | unbuffer -p grep localhost | cat
Run Code Online (Sandbox Code Playgroud)
或者告诉grep按行缓冲(如果它支持这个):
ping localhost | grep --line-buffered localhost | cat
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23704 次 |
| 最近记录: |