2014-12-02 107 views
2

我有一个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

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

感谢, 马克

+0

那么,你当然总是可以让你的脚本在适当的环境中执行自己,从而让你的用户隐藏这些细节。不过,可能有更好的解决方案。 – 5gon12eder 2014-12-02 20:00:40

+0

这里有一个愚蠢的问题:这里“无缓冲”是什么意思?像字符刷新stderr? – HuStmpHrrr 2017-10-31 18:08:05

回答

0

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

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

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

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

my_script 
0

在脚本中使用stdbuf不会帮助;它不会应用于脚本内的所有命令。

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

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