无缓冲的Bash输出

时间:2014-12-02 19:25:48

标签: linux bash

我有一个bash脚本,我试图用它来编写无缓冲的输出。我有这样的事情:

...
mkfifo $PIPE
for SERVER in ${SERVERS[@]}; do
    ssh $SERVER command >$PIPE &
done

while read LINE; do
    echo ${LINE}
done <$PIPE

问题是脚本的所有输出都是缓冲的。

我知道我可以在整个脚本中使用stdbufunbuffer之类的内容,但我不希望我的用户每次都必须运行stdbuf -o0 -e0 my_command

有没有办法在我的脚本中实现这种效果?

谢谢, 马克

2 个答案:

答案 0 :(得分:0)

为什么不创建一个别名来运行stdbuf,这又会使脚本输出解除缓冲?

我知道您不希望用户使用stdbuf手动输入命令。为什么不让用户创建一个执行stdbuf运行脚本的别名?

alias my_script='stdbuf -o0 -e0 <path_to_script>'

现在用户可以从终端运行脚本(终端也可以帮助填写脚本名称),如下所示:

my_script

答案 1 :(得分:0)

在脚本上使用stdbuf无济于事;它不适用于脚本中的所有命令。

stdbuf的正确位置是生成输出的命令,i。即

    ssh $SERVER stdbuf -o0 -e0 command >$PIPE &