-2

最近开始运行 Ubuntu 并花了一周左右时间自定义我的 .bashrc (Ubuntu) 文件和 .bash_profile (Mac) 以获取信息丰富且色彩丰富的 PS1 和终端输出的长期 Mac(读取 GUI)用户。

我有这个小小的功能:

function colors2nums()
{ for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done }

显示 256 种颜色和代码,所以我可以选择我想要的一种...

它在 Ubuntu(14.0.4 LTS,Gnome 终端)中完美运行,而在 Mac(iTerm 和 Terminal.app 的 OS 10.7.5)上根本无法运行。

Ubuntu 上 .bashrc 文件的 PROMPT_COMMAND 函数与 Mac 的 .bash_profile 中的 PROMPT_COMMAND 函数完全相同,逐行复制和粘贴。

两个 PS1 提示的颜色相同(在 Mac 端只有一些奇怪的间距),并且 ls -GFa(或任何变体)以 LS_COLORS 和 .dircolors 设置的颜色打印。所以颜色适用于一些输出,但不是全部。在 Mac 上,我得到 256 行与我的 PS1 中最后一个转义颜色(绿色、白色等)设置的终端输入颜色相同的行。

哇?!?

是的,我已经尝试了陷阱的 2 种变体 - 调试(黑客?):

#trap 'echo -ne \e[0m' DEBUG

trap 'printf "\e[0m" "$_"' DEBUG

这可以重置 Ubuntu 方面的输出。两者都不适用于 Mac。

我错过了什么?

4

2 回答 2

1

在终端中拥有不止几种颜色是一项相对较新的“发明”,并非所有终端程序都能够处理它。

另请注意,处理它的是实际的终端程序,shell 与它无关。

于 2015-09-21T06:59:47.893 回答
0

尝试printf改用:

for code in {0..255}; do printf "\e[38;05;${code}m $code: Test"; done

在此处输入图像描述

于 2015-09-21T08:28:04.773 回答