更改bash PS1用户名中特定字母的颜色


9

我想更改PS1在bash中显示的用户名中特定字母的颜色。

例如:如果我\urahul,我希望字母h为蓝色,其余部分为白色。

我确实知道,\u指的是用户名,并通过添加像这样的标签为整个“实体”添加颜色[\033[38;5;15m\]

如果可以的话,请问我该怎么做。

Answers:


13

如果您不介意不使用\u转义符,可以这样做:

PS1="\[\e[0;31m\]${USER:0:1}\[\e[m\]${USER:1} "

这会将提示设置为仅用户名和空格。用户名的第一个字符将为红色。通过在$USER特定范围内两次扩展变量,可以工作。第一次是从0到1。第二次是从1(第二个字符)到结尾。

要获得您要求的提示,请使用以下命令:

PS1="${USER:0:2}\[\e[0;34m\]${USER:2:1}\[\e[m\]${USER:3} "

1
您可以省略长度以从offset开始打印整个字符串: ${USER:1}对于除第一个字符以外的整个用户名。不错的解决方案!您还可以根据OP的要求显示如何更改第三个字符的颜色吗?
甜点

1
可以使用来测试类似的事情echo -e,例如echo -e "${USER:0:2}\e[0;34m${USER:2:1}\e[m${USER:3} "
甜点

2
是否必须使用各种不同的用户名(例如,突出显示每个人的第三个字母)?如果只适合您,则一种更简单的方法是对用户名的字母进行硬编码,例如ra而不是${USER:0:2},等等
。–

@egmont硬编码几乎从来都不是最好的方法,但是可以接受的是,它通常更简单。这样,您可以将代码放在全局配置文件中或与他人共享。它可以处理您的帐户重命名的情况。
塞巴斯蒂安·史塔克

1
我个人在三个名称不同的帐户之间共享自己的shell配置。但也许我们不应该在这里谈哲学:)
塞巴斯蒂安·斯塔克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.