我目前正面临命令问题
while sleep 0.3; do echo "1"; done | tail -n +3 | grep --line-buffered "1"
Run Code Online (Sandbox Code Playgroud)
我想要一个看起来像这样的输出:
[nothing during 0.6s]
1
1
...
Run Code Online (Sandbox Code Playgroud)
但有:
[nothing forever]
Run Code Online (Sandbox Code Playgroud)
我发现了这个问题并阅读了这篇博客文章,但由于该--line-buffered
选项设置为grep
,我认为这不是缓冲问题。我的研究并没有让我找到其他解决方案,我希望我没有遗漏一些明显的东西。
zsh 5.7.1 (x86_64-pc-linux-gnu)
如果重要,我正在使用。
正如 Barmar 在评论中提到的,这在4KB stdio buffer 中被吞没了。您可以使用unbuffer -p
它来避免它:
while sleep 0.3; do echo "1"; done | unbuffer -p tail -n +3 | grep 1
Run Code Online (Sandbox Code Playgroud)
或者您也可以stdbuf
在行缓冲模式下使用:
while sleep 0.3; do echo "1"; done | stdbuf -oL tail -n +3 | grep 1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1481 次 |
最近记录: |