2016-02-11 35 views
1

我們可以在常規命令上使用stdbuf,例如如何在bash函數上使用stdbuf

stdbuf -o 0 echo aaa 

但是我不能在bash函數上使用它,例如,

function tmpf() { echo aaa; } 
stdbuf -o 0 tmpf 

這是什麼原因?謝謝!

回答

1

原因是bash函數是bash會話的內部函數。 stdbuf和這樣的實用程序是單獨的程序,無法訪問shell會話,並且確實沒有任何bash知識。所以它只能運行可執行文件。

因爲bash有一些技巧了它的袖子,你可以出口一個bash的功能 - 就像導出環境變量 - 這將使得函數訪問bash的過程中孩子們跑。所以,你可以這樣做:

function tmpf() { echo aaa; } 
export -f tmpf 
stdbuf -o 0 bash -c 'tmpf' 

但即使在那裏,你需要得到stdbuf,以便調用函數執行一個孩子bash