根据StackOverflow的这篇文章,在KornShell中可能有一个彩色的提示。我还无法弄清楚该怎么做。我可以使用颜色:
echo -e "\033[34mLinux\033[00m"
给出蓝色的“ Linux”输出,如下所示:
printf "\033[34mLinux\033[00m"
但是,当我将转义代码合并到PS1提示变量中时,它们不会被转义。我需要怎么做才能获得彩色提示?除了成为让人眼花something乱的东西之外,我发现在视觉上解析输出时,彩色提示很有用。
根据StackOverflow的这篇文章,在KornShell中可能有一个彩色的提示。我还无法弄清楚该怎么做。我可以使用颜色:
echo -e "\033[34mLinux\033[00m"
给出蓝色的“ Linux”输出,如下所示:
printf "\033[34mLinux\033[00m"
但是,当我将转义代码合并到PS1提示变量中时,它们不会被转义。我需要怎么做才能获得彩色提示?除了成为让人眼花something乱的东西之外,我发现在视觉上解析输出时,彩色提示很有用。
Answers:
您需要在PS1变量中放入文字转义符。Ksh88以及诸如pdksh和mksh(较旧版本)之类的克隆,除非通过print内置,否则没有控制字符的文字语法。Mksh可以\e进行转义,但是pdksh需要八进制代码\033。
PS1=$(print '\033[34mLinux\033[00m')
ATT ksh93引入了转义转义的文字语法$'…'(自R39b起在mksh中也可用)。您可以使用反斜杠转义符将控制字符放入这些文字中。
PS1=$'\e[34mLinux\e[00m'
mksh也支持$'…'–诚然,因为Dave Korn(Korn Shell中的Korn)坚持要我添加它。
我将这些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 '
&略有不同shell的root:
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 '
由于特殊字符未复制,因此这是普通用户和root用户的pastebin粘贴。
人们的答案中发生了几件事,每件事都涉及不同的语法。
文档中给出了终端程序的转义序列。
如何在PS1变量中编码终端转义序列,例如\ e或文字转义。这取决于外壳。
如何在提示中添加更改信息,例如主机名,当前目录等。这也取决于shell。您可以在工作目录中使用特殊的反斜杠序列(例如\ w),或者必须命名环境变量或将命令行嵌入到字符串中。
如何告诉外壳哪些字符打印而哪些字符不打印。Shell不知道您的终端转义序列在哪里开始和结束。如果外壳程序具有命令行编辑器或类似的程序,则它需要知道打印哪些字符,以便知道光标在哪里。没有此详细信息,您的提示可能看起来正确,但是编辑的行为可能会很奇怪。
在bash中,您将\ [放在每个转义序列之前,并将\]放在之后。
在ksh中,您选择一个非打印ASCII字符,该字符不能出现在字符串的任何其他位置。在字符串的开头,您写了该字符,然后是ASCII回车。然后,您在每个转义序列前后都写相同的字符。z3ntu选择\ a作为标记字符。
由于先前的答案和其他来源,我得以提出以下建议:
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$_$$"