Shell
如何在 shell 腳本中將文本輸出到螢幕和文件?
目前我有一個 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"
它來閱讀它,而不會分散轉義碼文字的注意力。另請注意,在執行上述命令時,無法使日誌文件內容與列印到螢幕的內容不同,因此您不能在日誌文件中將彩色編碼輸出到螢幕和非彩色輸出。