用特定颜色编写命令

用特定颜色编写命令

我使用终端并希望在编写命令时使用特定的颜色。

例如,假设我在命令行上写“历史”。我希望从键盘输入的命令使用预定义的颜色进行着色。

总之,用户输入的所有命令都将以相同的颜色显示。

在此输入图像描述

因此

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\]"

我一开始就看到两个奇怪的字符,就在 01cun​​eus 之前

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

将所有这些放在一起,我们可以修改现有的PS1PS0变量,以便更改命令输入的颜色,但在命令执行之前恢复:

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以获得永久的兴奋。

相关内容