KornShell 中的彩色提示

KornShell 中的彩色提示

根據這個 StackOverflow 帖子,KornShell 中可能會有彩色提示。我一直不知道該怎麼做。我可以使用顏色:

echo -e "\033[34mLinux\033[00m"

給出藍色的“Linux”輸出,如下所示:

printf "\033[34mLinux\033[00m"

但是,當我將轉義程式碼合併到PS1提示變數時,它們並沒有被轉義。我需要做什麼才能獲得彩色提示?除了看起來很吸引人之外,我發現彩色提示在直觀地解析輸出時很有用。

答案1

只需使用文字 Esc 字符,輸入Ctrl- v, Esc(將顯示^[在螢幕上):

PS1="^[[34mLinux^[[00m"

echo或使用您發現有效的命令的輸出:

PS1="$(echo -e "\033[35mLinux\033[00m")"

答案2

您需要在PS1變數中放置一個文字轉義字元。 Ksh88 以及 pdksh 和 mksh(舊版)等複製版本沒有控製字元的文字語法,除非透過print內建的。 Mksh 理解\e轉義,但 pdksh 需要八進位代碼\033

PS1=$(print '\033[34mLinux\033[00m')

ATT ksh93 引入了反斜線轉義文字語法$'…'(自 R39b 起也可在 mksh 中使用)。您可以使用反斜線轉義符將控製字元放入這些文字中。

PS1=$'\e[34mLinux\e[00m'

答案3

我將這些用於mksh用戶shell

# custom prompt see http://comments.gmane.org/gmane.os.miros.mksh/126
PS1=$'\a\r\a\e[1;34m\a ^ ^  ^ ^ | \a\e[36m\a${USER:=$(ulimit -c 0; id -un 2>/dev/null || echo
\?)}@${HOSTNAME%%.*}\a\e[34m\a | ^ ^  ^ ^ | \a\e[0;33m\a$(local d=${PWD:-?} p=~; [[ $p = ?(*/) ]] || d=${d/#$p/~};
print -nr -- "$d")\a\e[1;34m\a |\n ^ ^  ^ ^ | \a\e[32m\a$(date +%H:%M)\a\e[34m\a | ^ ^ >>\a\e[0m\a '

&略有不同shellroot

PS1=$'\a\r\a\e[1;34m\a ^ ^  ^ ^  ^   \a\e[31m\a${USER:=$(ulimit -c 0; \
    id -un 2>/dev/null || echo \?)}@${HOSTNAME%%.*}\a\e[34m\a  ^ ^  ^ ^  ^ ^  ^   \a\e[0;33m\a$(
        local d=${PWD:-?} p=~
        [[ $p = ?(*/) ]] || d=${d/#$p/~}
        print -nr -- "$d"
)\a\e[1;34m\a  ^ ^ \n ^ ^  ^ ^  ^   \a\e[32m\a$(date +%H:%M)\a\e[34m\a  ^ ^  ^ ^   \a\e[0m\a '

在此輸入影像描述

由於特殊字元沒有複製,這是一個pastebin粘貼對於普通用戶和 root 用戶。

答案4

感謝之前的答案和其他來源,我能夠想出這些:

Korn shell 提示:

PS1="$(echo "\033[32m`logname`\033[35m@\033[32m`hostname` \033[33m`pwd`\033[36m\n\$\033[0m")"

重擊提示:

PS1="\[\e[32m\]\u\[\e[35m\]@\[\e[32m\]\h \[\e[33m\]\w\[\e[36m\]\n\$\[\e[0m\]"

它們給出相同顏色的提示(是的,我說女王英語;)),格式如下:

username@computername /current/working/directory
$

DOS 等效項(儘管沒有顏色選項)是:

prompt %username%@%computername% $P$_$G

這使:

username@computername /current/working/directory
>

“>”將其保留為“DOSsy”而不是帶有“$”的“nixy”,但如果您想要印記(“$”),那麼它將是:

prompt %username%@%computername% $P$_$$

如果您的登入帳戶具有必要的權限,則可以使「nixies」永久地在它們前面加上「export」:

export PS1="..."

並將 DOSsy 改為:

setx PROMPT "%username%@%computername% $P$_$G"

或者

setx PROMPT "%username%@%computername% $P$_$$"

相關內容