Linux 为什么超级简单功能在我的Mac终端上不显示256色?

Linux 为什么超级简单功能在我的Mac终端上不显示256色?,linux,macos,colors,.bash-profile,ps1,Linux,Macos,Colors,.bash Profile,Ps1,Mac(read GUI)长期用户,最近开始运行Ubuntu,并花了一周左右的时间自定义my.bashrc(Ubuntu)文件和.bash_配置文件(Mac),以获得丰富多彩的PS1和终端输出 我有一个小小的功能: function colors2nums() { for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done } 显示256种颜色和代码,以便我可以选择一个我想要的 它在Ubuntu(14.0.4LT

Mac(read GUI)长期用户,最近开始运行Ubuntu,并花了一周左右的时间自定义my.bashrc(Ubuntu)文件和.bash_配置文件(Mac),以获得丰富多彩的PS1和终端输出

我有一个小小的功能:

function colors2nums()
{ for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done }
显示256种颜色和代码,以便我可以选择一个我想要的

它在Ubuntu(14.0.4LTS,Gnome终端)中工作得很好,在Mac(iTerm和terminal.app都是OS 10.7.5)上根本不工作

Ubuntu上.bashrc文件的PROMPT_命令函数与.bash_配置文件中Mac的PROMPT_命令函数完全相同,是逐行复制粘贴的

两个PS1提示的颜色相同(Mac端只有一些奇数间距),ls-GFa(或任何变体)打印的颜色由ls_colors和.dircolors设置。因此,颜色对某些输出有用,但不是全部。在Mac电脑上,我得到256行与我的终端输入相同的颜色,这些颜色由PS1中最后一个转义颜色(绿色、白色等)设置

什么

是的,我尝试了陷阱调试(hack?)的两种变体:

这可以重置Ubuntu端的输出。两者在Mac上都不起作用


我遗漏了什么?

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


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

尝试使用
printf

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

问一问谢谢马克!printf成功了。现在,我要分享一个奇怪的发现:事实上,我昨晚通过使用不同的逃跑序列使它工作到深夜。我找到了这个网站,她提到了3种不同的转义序列:\e(shell),\0x1b(ASCII十六进制)和\033(ASCII Oct)。十六进制和Oct变体也都能工作。我很想知道为什么,但现在,它起作用了,我将继续做其他事情。干杯刚到Stack Exchange,很抱歉礼节不好,接受延迟。没问题!我想你接受也会得到分数:-)欢迎来到SO,尽情享受!如果使用的是
printf
,则不需要
for
循环:它将根据需要对所有参数重复:
printf”\e[38;05;%dm$code:Test“{0..255}
。值得一提的是,这完全特定于连接到标准输出的终端类型-它们并不完全相同。@iMattux是的,但Bash是一个在终端仿真器程序内部运行的shell(例如,
gnome terminal
).它是终端仿真器程序,将输入发送到shell,并打印shell的输出。
for code in {0..255}; do printf "\e[38;05;${code}m $code: Test"; done