Bash
僅在從互動式 shell 呼叫時才輸出顏色腳本
我製作了一個產生彩色輸出的 bash 腳本。從互動式外殼呼叫腳本時,顏色很好。但是,如果輸出在另一個腳本中處理,或者通過管道傳遞,它不應該被著色(我認為)。
這個一般是怎麼處理的?我應該提供一個選項來打開/關閉彩色輸出,還是有辦法在腳本中自動檢測到這一點?最好它自動工作,我只需要最少的程式碼來輸出彩色/非彩色,具體取決於腳本呼叫……
自動檢測的一個問題似乎是腳本總是以非互動方式執行,所以我必須知道父 shell 的互動狀態。
支持顏色輸出(例如
grep
和ls
)的 unix 應用程序通常具有命令行選項以及可能的自動檢測。看著
man ls
我們看到--color[=WHEN] colorize the output. WHEN defaults to `always' or can be `never' or `auto'. More info below
因此,預設情況下 ls 將始終使用顏色,請注意該
auto
選項。
man grep
顯示類似--color[=WHEN], --colour[=WHEN] <snipped> WHEN is never, always, or auto.
如果
auto
啟用該選項(對於您的應用程序可能是預設選項),那麼您正在尋找類似以下答案(由 Gilles 建議)的內容https://unix.stackexchange.com/a/10065/4635也就是說,如果您的輸出是終端並且支持顏色,並且使用者沒有禁用它,您應該使用顏色。當然,使用者使用
always
或never
跳過此檢查。如果程序
--color=always
支持自動檢測,我發現它很有用,因為這意味著我可以“當我知道更好”時強制使用顏色(比如我的目的地不是終端,但我知道它支持顏色)。在某些系統上,我有ls
to的別名ls --color=always
。