【问题标题】:Unbuffered Bash Output无缓冲的 Bash 输出
【发布时间】:2014-12-02 19:25:47
【问题描述】:

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

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

谢谢, 马克

【问题讨论】:

  • 好吧,您当然可以始终让您的脚本在适当的环境中自行执行,而不让用户看到这些细节。不过,可能有更好的解决方案。
  • 这里有个愚蠢的问题:unbuffered 在这里是什么意思?像 char 刷新的 stderr 一样?

标签: linux bash


【解决方案1】:

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

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

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

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

my_script

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 2011-07-24
      • 1970-01-01
      相关资源
      最近更新 更多