Shell

為您的終端和 shell 環境著色?

  • February 13, 2022

我大部分時間都在 Unix 環境中工作並使用終端仿真器。我嘗試在命令行上使用顏色,因為顏色使輸出更加有用和直覺。

有哪些選項可以為我的終端環境添加顏色?你使用什麼技巧?你遇到過哪些陷阱?

不幸的是,對顏色的支持因終端類型、作業系統、術語設置、實用程序、錯誤實現等而異。

經過大量實驗,以下是我的設置中的一些提示:

  1. 我傾向於設置TERM=xterm-color,大多數主機(但不是全部)都支持它。
  2. 我在許多不同的主機、不同的作業系統版本等上工作。我使用來自 macOS X、Ubuntu Linux、RHEL/CentOS/Scientific Linux 和 FreeBSD 的所有東西。如果可能的話,我會盡量保持簡單和通用。
  3. 我使用 GNU 做了很多工作screen,這又增加了一層樂趣。
  4. 許多作業系統dircolors預設設置和設置,我不想在一百個不同的主機上修改它。所以我嘗試堅持使用預設值。相反,我調整了終端的顏色配置。
  5. 對某些Unix 命令ls、、、、greplessBash 提示符vim使用顏色。這些命令似乎使用標準的“ ANSI 轉義序列”。例如:
alias less='less --RAW-CONTROL-CHARS'
export LS_OPTS='--color=auto'
alias ls='ls ${LS_OPTS}'

我會發布我.bashrc的問題並回答我自己的問題 Jeopardy Style。

以下是您可以做的幾件事:

編輯器 + 程式碼

很多編輯器都支持語法高亮顯示。vimemacs預設開啟。您也可以在 下啟用它nano

您還可以使用Pygments作為命令行工具在終端上語法高亮程式碼。

grep

grep --color=auto突出顯示所有匹配項。您還可以使用export GREP_OPTIONS='--color=auto'它使其在沒有別名的情況下持久化。如果你使用,即使在管道時--color=always它也會使用顏色,這會使事情變得混亂。

ls

ls --color=always

指定顏色:

export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33'

(提示:dircolors可能會有所幫助)

PS1

您可以將 PS1(shell 提示符)設置為使用顏色。例如:

PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '

將產生一個類似的 PS1:

$$ yellow $$盧卡斯@ubuntu:$$ red $$~$$ normal $$$ 你可以通過這個獲得真正的創意。作為一個想法:

PS1='\e[s\e[0;0H\e[1;33m\h    \t\n\e[1;32mThis is my computer\e[u[\u@\h:  \w]\$ '

在終端頂部放置一個帶有一些隨機資訊的欄。(為了獲得最佳效果,也請使用alias clear="echo -e '\e[2J\n\n'"。)

擺脫轉義序列

如果某些東西在您不希望輸出顏色時卡住了,我會使用這sed條線來去除轉義序列:

sed "s/\[^[[0-9;]*[a-zA-Z]//gi"

如果您想要更真實的體驗,您還可以去掉以 開頭的行\e[8m,它指示終端隱藏文本。(未得到廣泛支持。)

sed "s/^\[^[8m.*$//gi"

另請注意,那些 ^[s 應該是實際的、文字的 ^[s。您可以通過在 bash 中按 ^V^[ 來鍵入它們,即Ctrl+ V, Ctrl+ [

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