Terminal
將腳本輸出重定向到文件時防止 tput 轉義序列
我有一個 shell 函式,它使用
tput
.color=$( tput setaf 1 ) normal=$( tput sgr0 ) colorize() { echo "${color}$1$(normal)" }
當我呼叫該函式時,終端會按預期顯示彩色文件名。
$ myScript.sh . /path/to/dir # (in color red)
然後,如果我將輸出重定向到文件:
$ myScript.sh > /tmp/file.log
file.log
仍然包含轉義序列,例如:^[[36m~/path/to/my/file/^[(B^[[[m
這可能與TERM和infocomp以及終端如何解釋轉義序列有關嗎?
這個想法是模擬一個“非顯示”終端,不是嗎?
我的術語是(Ubuntu 16.04):
$ echo $TERM xterm
tput
當我的腳本被重定向到文件時,我應該怎麼做才能防止這種轉義序列?解決方法:在我的腳本中添加一個選項以手動禁用著色
ls
,grep
如--color=none
.
簡而言之: tput 不會那樣做。
更長:您的腳本可以做到這一點
例如,檢查標準輸出是否為終端:
if [ -t 1 ] then color=$( tput setaf 1 ) normal=$( tput sgr0 ) else color="" normal="" fi