Bash

如何讓終端以粗體顯示user@machine?

  • March 3, 2021

我在一些螢幕截圖中看到(不記得在網路上的哪個位置),終端可以顯示[username@machine /]$粗體字母。我也很期待得到這個,因為我總是發現自己在長輸出中滾動,很難找到命令後的第一行。

如何將使用者名等設為粗體或彩色?

您應該可以通過PS1在文件中設置提示變數來做到這一點,~/.bashrc如下所示:

PS1='[\u@\h \w]\$ '

要使其著色(可能是粗體 - 這取決於您的終端仿真器是否啟用了它),您需要添加轉義顏色程式碼:

PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '

1;91m在這裡,在和部分之間沒有被轉義的所有內容都0m將被著色為1;91顏色(粗體紅色)。將這些轉義碼放在提示的不同部分以使用不同的顏色,但請記住重置顏色,0m否則您也會有彩色終端輸出。記得在之後獲取文件以更新目前 shell:source ~/.bashrc

找到您PS1的設置位置並在開頭和結尾 .bashrc插入。'\[\e[1m\]'``\[\e[0m\]

  • \[並且\]是必要的,因此外殼知道內部的混亂占用了螢幕上的 0 空間,這可以防止在進行行編輯時出現一些搞砸的行為。你不需要太擔心它。
  • \e[被稱為CSI(控制序列引入器)。您會在引用的 Wikipedia 頁面上列出的大多數程式碼中看到它使用了它。\e 表示轉義字元。
  • 如果您查看 Wikipedia 頁面上的 SGR 表,您會看到 1 是明亮/粗體文本的數字,而 0 是重置。因此CSI 1m打開粗體並CSI 0m重置字型,以便您的文本的其餘部分正常。

Wikipedia 提供了完整的 ANSI 轉義碼列表,如果您的終端仿真器支持,您可以使用這些轉義碼。

編輯

為了可移植性和可讀性,您應該使用tput而不是硬編碼轉義碼。唯一的缺點是該tput方法不適用於支持 ANSI 程式碼但 terminfo 數據庫損壞或失去的終端,但在這種情況下,損壞的 terminfo 是一個更大的問題,因為許多依賴 terminfo 的控制台應用程序可能無法正常工作。

這是我在我的工作中所做的一個範例.bashrc

# color names for readibility
reset=$(tput sgr0)
bold=$(tput bold)
black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
user_color=$green
[ "$UID" -eq 0 ] && { user_color=$red; }
PS1="\[$reset\][\[$cyan\]\A\[$reset\]]\[$user_color\]\u@\h(\l)\
\[$white\]:\[$blue\]\W\[$reset\][\[$yellow\]\$?\[$reset\]]\[$white\]\
\\$\[$reset\] "

這是我的通用版本的樣子。0是最後一個命令的退出狀態。

PS1截圖

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