shell 默认的提示符形如 [<用户名>@<主机名> <路径>]$,其格式串定义形如 PS1="[\u@\h \w]\n\$ ",可能在 ~/.bashrc,也可能在 /etc/bashrc。
有时路径太长,但想保留方便复制,于是想将提示符换成形如:
[<用户名>@<主机名> <路径>]
$
即在 $ 前加一个换行。为了兼容 PS1 定义在 /etc/bashrc 的情况,可以在 ~/.bashrc 末尾加一句:
if [[ $PS1 != *"\n\$"* ]]; then
PS1="${PS1:0:0-2}\\n\\\$ "
fi
此处 ${PS1:0:0-2} 表示截原 PS1 字符串 [0: length - 2) 这一段子串,类似 python 的 PS1[0: -2]。
colour
彩色 prompt 设置法见 [3,4]。例如欲令:
- 用户名(
\u):前景绿(32)\[\033[1;32m\]\u\[\e[0m\] - 主机名(
\h):前景黑(30)、背景黄(43)\[\033[30;43m\]\h\[\e[0m\] - 路径(
\w/\W):前景紫(35)\[\033[1;35m\]\w\[\e[0m\]
可在 ~/.bashrc 如此设置 PS1:
PS1="\[\033[1;32m\]\u\[\e[0m\]@\[\033[30;43m\]\h\[\e[0m\] \[\033[1;35m\]\w\[\e[0m\]\n\$ "
或者学前一节,判断兼容别处定义的 PS1:
# \u 加颜色
if [[ $PS1 != *"\]\u\["* ]]; then
PS1=$(echo $PS1 | sed 's/\\u/\\[\\033[1;32m\\]\\u\\[\\e[0m\\]/g')
fi
# 把 \W 换成 \w
if [[ $PS1 == *"\W"* ]]; then
PS1=$(echo $PS1 | sed 's/\\W/\\w/g')
fi
# \w 加颜色
if [[ $PS1 != *"\]\w\["* ]]; then
PS1=$(echo $PS1 | sed 's/\\w/\\[\\033[1;33m\\]\\w\\[\\e[0m\\]/g')
fi
本文讲述了如何在Linuxshell中修改默认提示符,包括添加换行、颜色设置和兼容不同PS1定义的方法,以及使用sed进行字符串截取和替换。
1676

被折叠的 条评论
为什么被折叠?



