![用特定颜色编写命令](https://linux22.com/image/15700/%E7%94%A8%E7%89%B9%E5%AE%9A%E9%A2%9C%E8%89%B2%E7%BC%96%E5%86%99%E5%91%BD%E4%BB%A4.png)
我使用终端并希望在编写命令时使用特定的颜色。
例如,假设我在命令行上写“历史”。我希望从键盘输入的命令使用预定义的颜色进行着色。
总之,用户输入的所有命令都将以相同的颜色显示。
因此
history
grep -hir -C 8 "hello world" .
将以蓝色显示。
目前我对 PS1 有以下内容
PS1='\n\[\033[01;36m\]\u@\h:'
PS1=$PS1'\n+ \[\033[38;5;214m\]\w\[\033[00m\]\n'
然后我做了以下事情
OPS0="$PS0" OPS1="$PS1"
t7="$(tput setaf 7)" t5="$(tput setaf 5)"
[[ -n "$PS1" ]] && PS0="\[$t7\]" PS1="\[$t7\]$PS1\[$t5\]"
我一开始就看到两个奇怪的字符,就在 01cuneus 之前
pete@home:~$ ls
01cuneus Admir Documents logs Public
02chaos conjgrad.f90~ Downloads Music temp
03marshl Desktop fontconfig Pictures Videos
答案1
阅读文档bash
将引导您进入有关与提示相关的变量的部分。我们对这些感兴趣
PS0
在读取命令之后和执行命令之前,交互式 shell 会扩展并显示此参数的值。PS1
该参数的值被扩展并用作主要提示字符串。
这两个变量都引用了后面关于 PROMPTING 的部分,其中有这两个标记可在提示字符串中使用
\[
开始一系列非打印字符,可用于将终端控制序列嵌入到提示中\]
结束非打印字符序列
最后,tput
命令引用terminfo
,其中包含有关颜色的这些部分
setab
将背景颜色设置为#1,使用 ANSI 转义setaf
使用 ANSI 转义将前景色设置为 #1
和
setaf
/ [...]功能setab
各自采用一个数字参数。setaf
/的参数值 0-7setab
可移植定义如下 [...]Color #define Value RGB black COLOR_BLACK 0 0, 0, 0 red COLOR_RED 1 max,0,0 green COLOR_GREEN 2 0,max,0 yellow COLOR_YELLOW 3 max,max,0 blue COLOR_BLUE 4 0,0,max magenta COLOR_MAGENTA 5 max,0,max cyan COLOR_CYAN 6 0,max,max white COLOR_WHITE 7 max,max,max
将所有这些放在一起,我们可以修改现有的PS1
和PS0
变量,以便更改命令输入的颜色,但在命令执行之前恢复:
OPS0="$PS0" OPS1="$PS1" # Save originals
t7="$(tput setaf 7)" t6="$(tput setaf 6)" # White, Cyan
[[ -n "$PS1" ]] && PS0="\[$t7\]" PS1="\[$t7\]$PS1\[$t6\]" # After and before command entry
如果您不喜欢所看到的内容,可以恢复这些值(或者只是启动一个新的 shell)
PS0="$OPS0" PS1="$OPS1"
准备好后,将台词添加到您的台词中,.bashrc
以获得永久的兴奋。