我读了这篇关于自定义 bash 提示符的很棒的文章:
http://blog.superuser.com/2011/09/21/customizing-your-bash-command-prompt/
我还阅读了有关在 bash 中使用 256 种颜色的信息:
http://www.logilab.org/blogentry/20255
现在,我的 .bashrc 如下所示:
# Extended 256 colors
ext-color() {
echo -ne "\[\033[38;5;$1m\]$2\[\033[m\]"
}
# Set a fancy prompt
PS1="`ext-color 172 \u` in `ext-color 172 $(pwd)`"
这让我差点就看到橙色提示,但用户名并没有被打印出来。相反,它看起来像这样:
u in /home/dave
我该如何修改它以打印当前登录用户的用户名?我的意思是这样:
dave in /home/dave
答案1
它比你想象的要简单得多。当你运行命令时ext-color 172 \u
(作为设置 PS1 的一部分或单独运行),shell 会解析\u
,删除它认为不相关的\
,然后再将其传递给ext-color
as $2
。解决方案很简单:在将其传递给 之前将其括在引号中ext-color
:
PS1="$(ext-color 172 '\u') in $(ext-color 172 '\w')"
(请注意,我还将反引号替换为$( )
,用 代替\w
,$(PWD)
并'\w'
出于与 相同的原因引用'\u'
。)
答案2
调整提示第二部分中似乎有效的方法,尝试例如:
PS1="`ext-color 172 $(whoami)` in `ext-color 172 $(pwd)`"
或者更简单:
PS1="`ext-color 172 $USER` in `ext-color 172 $(pwd)`"
或者更棒的是:
PS1="$(ext-color 172 "$USER") in $(ext-color 172 "$(pwd)")"
由于调用周围有引号,最后一个版本不会截断当前目录中潜在空格后的部分pwd
。
编辑:这不会更新工作目录,如评论中所述。我甚至没有想到这一点,因为这个问题专门询问了用户部分(现在已经很晚了 :-) )。
最简单(“正确”、“唯一”)的方法就是写
PS1='\[\033[38;5;172m\]\u\[\033[m\] in \[\033[38;5;172m\]\w\[\033[m\]'
并完全跳过函数定义。
扩张:为了使PS1
变量动态扩展函数调用,请使用反斜杠来阻止过早评估:
PS1="$(ext-color 172 "\$USER") in $(ext-color 172 "\$PWD")"
应该管用。