用于命令和输出的不同颜色


13

我想知道是否可以在linux中将命令输出的颜色更改为与我键入的命令行不同的颜色。它是如此单调,很难找到输出的开始位置。喜欢,

@USER/Destop$ ----> blue
/*
--------------
output file in white
-----------
*/

谢谢


2
也许使用precmd_functions,您可以更改提示颜色并将其设置回preexec_functions之前,或类似的东西。(在zsh中,我不知道其他外壳是否具有等效功能)
pataluc

我只是尝试了我的建议,但我没有把命令涂上颜色... :(
pataluc 2013年

1
@pataluc:我成功了preexec () { echo -n "\\e[40;34m" };该precmd功能是不需要恕我直言的,似乎zsh在显示提示之前会重置颜色本身。但这仅适用于不会改变颜色本身的命令(突出的示例是ls),如Aaron所指出的那样。使用cat,,bc内置的shell命令等(甚至alpine),效果很好。
mpy 2013年

@mpy我也成功完成了所有命令,假设raj想要给命令加上颜色而不是结果,我将其添加"\\e[40;34m"PROMPTvar 的末尾,并用preexec () { echo -n "\\e[40;37m" }... 将其设置回白色
pataluc 2013年

1
@pataluc:对不起,现在我明白了。要为命令行着色,只需使用zle_highlight=(default:fg=cyan)最新的zsh版本即可。Zsh还提供动态着色,例如fish; 请参阅man zshzle中的“字符突出显示”部分。
mpy

Answers:


5

并不是的; 给定程序输出的颜色由命令而不是终端控制。

就是说,假设您的终端了解ANSI的颜色转义码(大多数情况下),则可以使用转义码在提示的开头设置所需的提示颜色,并在提示的末尾设置所需的输出颜色。这将导致您的命令行也使用您为输出设置的任何颜色,但这可能与您要寻找的内容几乎一样。例如,以下内容:

$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '

会提示您如下:

user@host:wd $ _

“用户”和“主机”为紫色,“ wd”(您的cwd)为棕色(深黄色),“ $”后的所有内容均为浅蓝色。(默认的xterm会将其呈现为青色; gnome-terminal似乎默认为相当不错的矢车菊蓝色。)

以bash的必要格式指定的实际颜色代码例如为\[\033[00;35m\],其中00;35实际颜色规范为;前导00很少更改,但是可以产生IIRC粗体(01),下划线(??)和反向视频(??)效果,而尾部的'35'是实际颜色,在这种情况下为紫色。

很难找到像样的ANSI颜色代码列表,但是前景颜色的范围是30到37,背景颜色的范围是40到47,如下所示:

color        fg  bg
black        30  40
red          31  41
green        32  42
yellow       33  43
blue         34  44
purple       35  45
cyan         36  46
gray/white   37  47

请记住,由于您为提示符后的所有内容设置了默认颜色,因此您运行的未通过转义码设置其自身颜色的程序将采用该颜色-例如,如果您运行传呼机,您可能会看到其输出的颜色与您为其他命令设置的颜色相同。同时,该指令通过转义码设置自己的颜色会完全忽视你的努力。


1
除了发现转义代码,我发现使用tput着色更具可读性。例如,我的提示(以bash表示)export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "将输出时间,然后以一种颜色输出用户名,@以另一种颜色输出用户名,并以第三种颜色输出主机名(此时为红色,白色和蓝色),然后输出PWD和$ 。滚动浏览历史记录时,一目了然,很容易看到提示行在哪里。
MattDMo

真棒...这就是我想要的。谢谢您能告诉我如果我想更改颜色时要更改哪些值?
raj 2013年

有没有办法使最后一个与以前的颜色保持一致?
raj 2013年

为何更改不那么持久,每次登录时,我都必须重新着色
raj 2013年

1
除非将更改添加到Shell的初始化文件(对于bash为)~/.bashrc,否则更改不是永久的。找到设置PS1的行,这是您的提示字符串,并按照答案中的说明进行修改。更改内容取决于设置提示字符串的方式,但是大多数重要的细节都在我的答案中,其余的可以通过稍作谷歌搜索来找到。我不确定您的意思是“有没有办法使最后一个颜色与以前的颜色保持相同?”
亚伦·米勒

7

您可以将输出传递给进行着色的程序。例如,有些程序如pycolor

pycolor module.py

建立自己的:

red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"

有关颜色输出的更多信息。


3

是的,至少在Linux和Mac OS上,我可以在bash上使用它。

首先,设置一些属性变量,然后PS1提示使用所需的命令行属性保留终端设置,例如:

bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"

然后,使用bash DEBUG陷阱(在每个命令之前执行)来更改命令输出的文本属性:

trap 'echo -ne "${none}"' DEBUG


1

将它们扔到您的.bashrc文件中,然后在保存后获取源文件。

blk=$'\x1b[90m' # Sets text to black
red=$'\x1b[31m' # Sets text to red
grn=$'\x1b[92m' # Sets text to green
ylw=$'\x1b[93m' # Sets text to yellow
blu=$'\x1b[94m' # Sets text to blue
pur=$'\x1b[95m' # Sets text to purple
cyn=$'\x1b[96m' # Sets text to cyan
wht=$'\x1b[97m' # Sets text to white
rst=$'\x1b[0m'  # resets to default terminal color

完成此操作后,您便可以在终端中永久使用其中的任何一个,直到注释掉变量或将其完全删除为止。您可以在计算机上的脚本中使用它们,也可以通过命令替换或其他方式使用它们。以下是我个人使用方式的以下示例:

echo -e "${red}This text is red.${rst}"
printf "${grn}This text is green.\n${rst"

我通常将它们与单个echo和/或printf命令一起使用,但是您也可以使用它们为其他命令(例如,ping命令)着色。添加以下内容以.bashrc获得效果。然后获取.bashrc文件并运行cping命令以使用ping紫色文本。您可以将每个命令功能设置为使用终端支持的任何颜色。

# Add this to your .bashrc file
colored_ping() {

    echo -e "${pur}$(ping $1)${rst}"
}

alias cping='colored_ping'

然后尝试:

user@linux:~# cping superuser.com

您的输出为cping紫色。如果要在同一输出中使用多种颜色,则可以采用独特的方式添加它们。您如何做完全取决于您。例如:

echo -e "${red}This is red and ${blu}this is blue and ${grn}this is green.${rst}

0

您应该看看git hub上可用的hl命令:
github:git clone http://github.com/mbornet-hl/hl

http://www.flashnux.com/notes/page_000022_US.html
hl是用C编写的linux命令,专门用于为文本文件或命令的输出着色。您最多可以同时使用42种颜色,并使用配置文件来简化命令行。您可以为可以传递给另一命令的每条命令的输出着色。而且,如果您知道什么是正则表达式,那么使用起来将非常容易。您可以使用手册页来了解如何使用它。

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.