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