我想從的拷貝stdout到的一個日誌文件,這意味着我不想調用帶有輸出的腳本來管理髮球,我想腳本本身來處理它。我已經成功地使用this答案做到這一點,使用下面的代碼:從bash腳本本身拷貝* unbuffered * stdout到文件
#!/bin/bash
exec > >(sed "s/^/[${1}] /" | tee -a myscript.log)
exec 2>&1
# <rest of script>
echo "hello"
sleep 10
echo "world"
這工作,但被緩衝輸出的缺點,直到腳本完成,如在鏈接的答案了討論。在上面的例子中,只有在10秒後,「hello」和「world」纔會出現在日誌中。
我知道stdbuf命令,如果用
stdbuf -oL ./myscript.sh
運行腳本,然後標準輸出確實是連續打印既文件和終端。 但是,我希望在腳本中處理這個問題。有什麼辦法可以將這兩種解決方案結合起來?我寧願不求助於一個包裝腳本,它簡單地調用由「stdbuf -oL」包圍的原始腳本。
感謝。這些限制確實沒問題。這可能不是最乾淨的解決方案:-)但我會嘗試。 – JHH