自定义 bash shell:将命令加粗/着色

自定义 bash shell:将命令加粗/着色

网上有很多教程/帖子(例如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.
#
...

答案1

您必须在 PS1 之后留下一个颜色尾随(>在您的示例中启动它),然后在运行命令之前使用 bash DEBUGtrap 清除颜色(但在 shell 中按 Enter 键之后)。尝试这样的操作:

shopt -s extdebug
trap "tput sgr0" DEBUG

答案2

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

PS1='\[\e[1;34m\]\w\$ \[\e[0;32m\]'
trap 'printf \\e[0m' DEBUG

DEBUG 陷阱,如由克里斯·唐建议,用于重置文本属性。它的目的是为了调试,但是在执行用户输入的命令之前执行代码也很有用

在提示设置中:

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

答案3

我刚刚学习 BASH 命令,我一直坐在这里玩我的版本中的颜色命令。我想出了这个解决方案:

使用这个命令:

PS1='\[\e[0:36m\]\h>\[\e[0;31m\]'

解构: PS1= :启动 PS1 命令

' ' :将命令包含在单引号中(因此 BASH 不认为这是它的命令)

\ :每个单独的命令都以此开头

[ ] :包含每个命令

\e(也可以是 \033 ASCII 转义字符):启动颜色命令

颜色命令位于它所应用的对象之前。

[\e[0;36m] : 青色

\h : 主机名

'>' : 在主机名之后打印

[\e[0;31m] :红色

显然,最后的红色命令使输入变成红色。只需根据您的喜好更改颜色即可,这就是您想要的。

另外,这个网站对我有一点帮助:

https://www.linuxnix.com/linuxunix-shell-ps1-prompt-explained-in-detail/

我的版本:GNU bash,v.4.2.46

小心,

黄鼠狼

相关内容