我想修改一个打印出带宽输入/输出的 i3Blocks 脚本(i3 WM 环境的实用程序块)。特别是我想更改此指令输出的颜色:
echo -n " $INLABEL"
使用颜色#9fbc00
我该怎么做?谢谢
答案1
简短的回答是你不能,因为真正的 24 位颜色 (rgb) 不是公认标准的一部分,无论终端是否支持它,都将是一个问题。您应该使用终端调色板中的预定义颜色。ANSI 3/4 位颜色
也就是说,有些终端确实支持真正的24位颜色,并且大多数都使用这种格式:\033[48;2;r;g;bm
将颜色4
设置48
为背景,可以将其更改为3
将颜色定义为前景。 (更多信息)
rg 和 b 字母代表十进制的 8 位数字,因此printf "\033[38;2;159;188;0mhello
会以您想要的颜色打印 hello ( #9fbc00
),但一旦执行命令它就不会重置,因此您需要告诉终端返回到原始颜色。为此,您需要使用另一个转义序列。
\033[0m
现在知道了,一种无错误的打印Hello world!
方式#9fbc00
是
printf "\033[38;2;159;188;0mHello world!\033[0m\n"
。
ps: echo 不喜欢转义码,如果你想格式化东西,请使用 printf
答案2
像i3blocks 的手册页状态:
The standard output of the command line is used to update the block content.
Each non-empty line of the output will overwrite the corresponding property:
1. full_text
2. short_text
3. color
For example, this script sets the full_text in blue but no short_text:
echo "Here's my label"
echo
echo \#0000FF
因此,让您的脚本打印出三行,最后一行应包含颜色代码。
这当然会改变所有脚本输出的颜色。