Bash
如何讓終端以粗體顯示user@machine?
我在一些螢幕截圖中看到(不記得在網路上的哪個位置),終端可以顯示
[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
是最後一個命令的退出狀態。