bash 提示符中的真实颜色?

bash 提示符中的真实颜色?

是否可以在 bash 提示符中使用真彩色?我在 MacOS 上使用 iTerm2,它确实支持真彩色。但不确定如何在 bash 提示符中使用真彩色。

此刻我正在使用tput af <number>bash 提示来获取颜色。

答案1

这似乎是可能的。例如:

export PS1="\[$(printf "\x1b[48;2;15;100;50m\]A nice dark green [rgb(15,100,50)]:\[\x1b[0m")\] "

export PS1="\[$(printf "\x1b[38;2;255;100;250m\]A lovely shade of pink [rgb(255,100,250)]:\[\x1b[0m")\] "

可能有比调用 $(printf ...) 更好的方法。我希望有,但我不知道。关键是将所有“元”内容(但不是实际内容)包装进去,\[\]防止 shell 将其计入提示长度的一部分,以便在重新绘制时(例如,在循环浏览历史记录时)可以很好地播放。

每个表达式中的最后三个数字\x1b[...m代表所需的红色、绿色和蓝色值(从 0 到 255)。

第一个数字设置背景 (48) 或前景 (38)。我不知道另一个数字有什么用,但尝试添加一个额外的数字\x1b[38;4m似乎可以将文本设置为带下划线。

您也许可以从这个要点中获得更多:https://gist.github.com/XVilka/8346728

答案2

所以,我今天花了一段时间研究了一下,找到了一些易于配置的东西。我创建了一个 .bash_colors 文件,将其放入其中,然后从我的 .bash_aliases 中获取它:

# set your RGB colors
cname='108;159;164'
cdir='108;188;150'

# leave this block alone
code_color_name="\x1b[38;2;${cname}m"
code_color_dir="\x1b[38;2;${cdir}m"
code_color_reset='\x1b[0m'

# leave this block alone
c_name=$(printf "${code_color_name}")
c_dir=$(printf "${code_color_dir}")
c_rst=$(printf "${code_color_reset}")

# your PS1 prompt.  configure as desired
export PS1='\[${c_name}\]\u@\h\[${c_rst}\]:\[${c_dir}\]\w\[${c_rst}\]\$ '

我确信可以用更少的行来完成,但是为了便于阅读,我这样做了。只需设置您的 RGB 代码并根据需要修改 PS1。

(上下滚动浏览历史记录也很方便。)

相关内容