Terminal

將腳本輸出重定向到文件時防止 tput 轉義序列

  • March 2, 2018

我有一個 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

這可能與TERMinfocomp以及終端如何解釋轉義序列有關嗎?

這個想法是模擬一個“非顯示”終端,不是嗎?

我的術語是(Ubuntu 16.04):

$ echo $TERM
xterm

tput當我的腳本被重定向到文件時,我應該怎麼做才能防止這種轉義序列?

解決方法:在我的腳本中添加一個選項以手動禁用著色lsgrep--color=none.

簡而言之: tput 不會那樣做。

更長:您的腳本可以做到這一點

例如,檢查標準輸出是否為終端:

if [ -t 1 ]
then
   color=$( tput setaf 1 )
   normal=$( tput sgr0 )
else
   color=""
   normal=""
fi

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