自定义 bash shell:粗体/颜色命令

jla*_*son 14 colors bash

网上有很多教程/帖子(例如http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/)关于如何通过设置在 bash 中自定义提示PS1。有没有办法自定义我输入的命令的颜色/粗体?

换句话说,作为一个例子,假设我想要一个绿色的提示,一个粗体的蓝色命令,然后以任何默认的颜色输出。在下面的示例中,我已经知道如何joe>通过设置PS1. 但是有没有一种方法可以让我git status显示为粗体?

joe> git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
...
Run Code Online (Sandbox Code Playgroud)

Chr*_*own 15

你必须在 PS1 后面留下一个颜色(>在你的例子中开始它),然后DEBUG在你的命令运行之前使用 bash陷阱清除颜色(但是在你在你的 shell 中按 Enter 之后。尝试这样的事情:

shopt -s extdebug
trap "tput sgr0" DEBUG
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 8

为了完整起见,这里是如何在 bash 中设置提示颜色和命令行输入颜色。将这些行放在您的.bashrc.

PS1='\[\e[1;34m\]\w\$ \[\e[0;32m\]'
trap 'printf \\e[0m' DEBUG
Run Code Online (Sandbox Code Playgroud)

Chris Down 建议使用 DEBUG 陷阱来重置文本属性。它用于调试,但在执行用户键入的命令之前执行代码也很有用

在提示设置中:

  • \[…\] 用于转义序列,以告诉 bash 它们不会占用任何屏幕空间(没有它们,当 bash 需要重绘提示时,屏幕会变得乱码)。
  • \e[…m其中是一个数字,或更一般地说是由分号分隔的数字序列,是发送到终端以影响后续文本的颜色和其他属性的转义序列。例如,1;34设置粗体蓝色;0;32重置所有属性,然后将颜色切换为绿色。根据口味调整。
  • \w\$打印当前目录和$#。您当然可以将其更改为您喜欢的任何内容,并根据需要在两者之间插入文本属性更改。
  • 最后有一个最终属性更改,它设置了文本输入的颜色。