如何将剪切输出写入文件

Art*_*nin 5 linux bash shell

我在bash上有自定义生成器:

#!/bin/bash
while :
do
    echo "1 2 3 4"
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

我不想削减第3栏:

$ ./loop.sh | cut -d' ' -f3
Run Code Online (Sandbox Code Playgroud)

这工作正常,但当我尝试将其输出到文件时:

$ ./loop.sh | cut -d' ' -f3 > myfile
Run Code Online (Sandbox Code Playgroud)

什么都没发生,这个文件是空的.我期待看到3列,但什么都没有.我做错了什么?

小智 4

正如我在评论中提到的,它可能正在缓冲。当我尝试这个时,我得到了相同的结果。您可以使用stdbuf修改缓冲,如下所示(至少,这对我有用):

./loop.sh | stdbuf -o0 cut -d' ' -f3  > myfile
Run Code Online (Sandbox Code Playgroud)

缓冲是在管道链的最后一部分完成(或似乎完成)的,因此这就是stdbuf放置的位置。

man stdbuf详情请参阅。