Bash
如何將標準輸出和標準錯誤複製到日誌中?
我需要從腳本中將標準錯誤和標準輸出寫入
$LOG
,同時將它們列印在控制台上。該腳本有許多命令,因此重定向每個命令並不是一個好的解決方案。
我已經嘗試過了,但它沒有按預期工作:
#!/bin/bash LOG=/var/tmp/log #... exec > $LOG 2>&1
我的目標是寫入
$LOG
任何標準輸出和標準錯誤,但同時也寫入標準輸出(在控制台上)。是否可以?
使用tee。例如:
command 2>&1 | tee file.txt
它執行
command
將 SDTERR 重定向到 SDTOUT。tee
將 STDIN 複製到 STDOUT 和 filefile.txt
。在 bash 中,您可以通過以下方式使用程序替換將輸出複製到
$LOG
:exec &> >(tee $LOG)
然而,這種bashism 不適用於其他 shell。
我不確定這是否是最乾淨的解決方案,但它對我有用:
#!/bin/bash LOG=/var/tmp/log ( # lots of commands # ... ) 2>&1 | tee $LOG
不過,@sebasth 給出了更好的解決方案:
#!/bin/bash LOG=/var/tmp/log exec &> >(tee $LOG) #...