我一直在嘗試編寫符合POSIX標準的代碼,並希望將stdout
和stderr
寫入日誌文件以及使用tee的屏幕。爲什麼我需要回到系統提示符?
該程序運行正常,並做它應該.. 但系統提示不會出現,直到我打回車(再次)。 我不知道爲什麼會發生這種情況。 有誰知道我可以如何避免這種情況發生?
rm mylog.txt
exec > >(tee -a mylog.txt)
exec 2>&1
echo food
echo bar
exit
我一直在嘗試編寫符合POSIX標準的代碼,並希望將stdout
和stderr
寫入日誌文件以及使用tee的屏幕。爲什麼我需要回到系統提示符?
該程序運行正常,並做它應該.. 但系統提示不會出現,直到我打回車(再次)。 我不知道爲什麼會發生這種情況。 有誰知道我可以如何避免這種情況發生?
rm mylog.txt
exec > >(tee -a mylog.txt)
exec 2>&1
echo food
echo bar
exit
從來沒有見過你的語法與此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
的最後一位輸出覆蓋。我不認爲這解釋了another_bug正在看到什麼。 –
只是想幫助...這將有助於使用錘子而不是螺絲刀釘。 –
謝謝你們都幫助我瞭解了一些有關我在哪裏搞亂(很多)的情況。我會進行建議的更改。 –
帶進程替換的POSIX代碼?他們什麼時候添加的? –
除了非POSIX,進程替換可能是你的問題的原因。它有點片狀。它可能退出shell而不等待'tee'進程先退出,導致提示被tee –