2
我想要做以下;Bash - 重定向stdout登錄和屏幕stderr只有日誌
- 將stdout的副本重定向到日誌文件並在屏幕上保留stdout。
- 將stderr重定向到相同的日誌文件並且不顯示在屏幕上。
沒有標準輸出代碼篩選:
#!/bin/bash
exec 1> >(sed -u 's/^/INF: /' >> common.log)
exec 2> >(sed -u 's/^/ERR: /' >> common.log)
echo "some txt"
echo "an error" >&2
echo "some more txt"
echo "one more error" >&2
日誌:
INF: some txt
INF: some more txt
ERR: an error
ERR: one more error
第一個問題是緩衝,我試圖用sed的 '-u' 無緩衝的否定。
代碼標準輸出到屏幕:在屏幕掛
#!/bin/bash
exec 1> >(sed -u 's/^/INF: /' | tee -a common.log)
exec 2> >(sed -u 's/^/ERR: /' >> common.log)
echo "some txt"
echo "an error" >&2
echo "some more txt"
echo "one more error" >&2
結果(不得不按Ctrl-C)和日誌仍然緩衝。建議?
對於給定的命令是的,但我希望整個命名空間因此使用exec。我可以在{}或函數本身中封裝特定的部分,並使用您的解決方案,但這並不理想。 – koola
鑑於沒有更好的選擇,我將此標記爲答案。 – koola