2014-12-02 105 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 &