定制bash shell:加粗/上色命令


13

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

如果您想要一个非常好的外壳,则应该使用zsh,要实现的目标非常简单preexec() { printf '\e[0m' }
bollovan 2011年

3
@bollovan-“非常好”有点主观,我发现它真的很可恶,因为它过时且不符合POSIX。但是,无论您的船浮在水上。
克里斯·

@ChrisDown bloat使您的船漂浮-从未听说过,相当可笑。
n611x007 2013年

Answers:


13

您必须在PS1之后留下颜色(>在示例中之后启动),然后使用bash DEBUG陷阱清除颜色,然后再运行命令(但在shell中按Enter键即可)。 :

shopt -s extdebug
trap "tput sgr0" DEBUG

对于一个陌生的人来说,可以逃避代码:这会保留命令的原始颜色(例如,是否会ls --color=always被着色)?
n611x007 2013年

@naxa-是的,因为这明确设置了颜色代码(以默认终端颜色上色的颜色除外,该颜色仅在第一种颜色之后生效)。
克里斯·唐尼

这个技巧似乎会干扰制表符的完成(打印出奇怪的东西^[(B^[[m)。不过,它仅在某些系统上发生:我在两个都运行Ubuntu 12.04 LTS的系统上进行了测试,其中只有一个受到干扰。
musiphil

7

为了完整起见,这是在bash中设置提示色和命令行输入色的方法。将这些行放在您的计算机中.bashrc

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

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

在提示设置中:

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

仅供参考,bash颜色代码/序列可以在此处查询:misc.flogisoft.com/bash/tip_colors_and_formatting
kaiwan

0

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

使用此命令:

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

解构:PS1 =:启动PS1命令

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

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

[]:包含每个命令

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

color命令先于其应用。

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

\ h:主机名

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

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

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

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

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

我的版本:GNU bash,v。4.2.46

照顾自己,

黄鼠狼

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.