shell提示符换行、颜色

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

References

  1. 自定制 shell 提示符
  2. shell脚本字符串截取的8种方法
  3. Linux命令行提示符颜色格式设置
  4. 让Linux的Shell提示和输出是彩色的
  5. shell bash终端中输出的颜色和格式详解(超详细)
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值