Shell

如何在 shell 腳本中將文本輸出到螢幕和文件?

  • April 23, 2020

目前我有一個 shell 腳本,它將消息記錄到這樣的日誌文件中:

log_file="/some/dir/log_file.log"
echo "some text" >> $log_file
do_some_command
echo "more text" >> $log_file
do_other_command

執行此腳本時,螢幕沒有輸出,並且由於我通過 putty 連接到伺服器,因此我必須打開另一個連接並執行“tail -f log_file_path.log”,因為我無法終止正在執行腳本,我想實時查看輸出。

顯然,我想要的是文本消息列印在螢幕上並寫入文件,但我想在一行中完成,而不是兩行,其中一行沒有重定向到文件。

如何做到這一點?

這有效:

command | tee -a "$log_file"

tee將輸入保存到文件(用於-a追加而不是覆蓋),並將輸入複製到標準輸出。

因為該命令可以檢測到它現在正在以非互動方式執行,所以這可能會改變它的行為。最常見的副作用是它會禁用顏色輸出。如果發生這種情況(並且您想要 ANSI 顏色編碼輸出),您必須檢查命令文件以查看它是否有辦法強制它恢復到互動式行為,例如grep --color=always. 請注意,這意味著日誌文件還將包含這些轉義碼,您需要使用less --RAW-CONTROL-CHARS "$log_file"它來閱讀它,而不會分散轉義碼文字的注意力。另請注意,在執行上述命令時,無法使日誌文件內容與列印到螢幕的內容不同,因此您不能在日誌文件中將彩色編碼輸出到螢幕和非彩色輸出。

引用自:https://unix.stackexchange.com/questions/80707