2016-08-25 60 views
1

我一直在嘗試編寫符合POSIX標準的代碼,並希望將stdoutstderr寫入日誌文件以及使用的屏幕。爲什麼我需要回到系統提示符?

該程序運行正常,並做它應該.. 但系統提示不會出現,直到我打回車(再次)。 我不知道爲什麼會發生這種情況。 有誰知道我可以如何避免這種情況發生?

rm mylog.txt 
exec > >(tee -a mylog.txt) 
exec 2>&1 
echo food 
echo bar 
exit 
+0

帶進程替換的POSIX代碼?他們什麼時候添加的? –

+0

除了非POSIX,進程替換可能是你的問題的原因。它有點片狀。它可能退出shell而不等待'tee'進程先退出,導致提示被tee –

回答

1

從來沒有見過你的語法與此exec >東西......所以我無法解釋你會得到什麼(我沒有得到像你說的一樣 - 這可能是特定於您正在使用的外殼)。

你可以避免有這種行爲通過做你的腳本包裝;這裏是如何:

#!/bin/bash 
# removing even when non existing 
rm -f mylog.txt 
{ 
    echo food 
    echo bar 
    # testing the stderr too: 
    ls -la non_existant_file 
} 2>&1 | tee -a mylog.txt 
+0

的最後一位輸出覆蓋。我不認爲這解釋了another_bug正在看到什麼。 –

+0

只是想幫助...這將有助於使用錘子而不是螺絲刀釘。 –

+0

謝謝你們都幫助我瞭解了一些有關我在哪裏搞亂(很多)的情況。我會進行建議的更改。 –

相關問題