printf颜色无效.bash_logout

时间:2016-09-13 00:19:29

标签: bash ssh

我正在尝试使用this lovely script从我正在进入的Ubuntu框中注销。如果我手动调用它,颜色是正确的。但是,无论何时从 .bash_logout 运行,每一行都是白色的,并以颜色代码为前缀:

\x1B[38;5;160;01m  .d8888b.  8888888888 8888888888      Y88b   d88P  .d88888b.  888     888  
\x1B[38;5;196;01m d88P  Y88b 888        888              Y88b d88P  d88P" "Y88b 888     888  
\x1B[38;5;202;01m  "Y888b.   8888888    8888888            Y888P    888     888 888     888  
\x1B[38;5;208;01m     "Y88b. 888        888                 888     888     888 888     888  
\x1B[38;5;214;01m       "888 888        888                 888     888     888 888     888  
\x1B[38;5;220;01m Y88b  d88P 888        888                 888     Y88b. .d88P Y88b. .d88P  
\x1B[38;5;226;01m  "Y8888P"  8888888888 8888888888          888      "Y88888P"   "Y88888P"  

在VM和我的主机(OS X 10.11)中,TERM设置为 xterm-256color 。我尝试使用echo -e,但它只是在前面加上-e的颜色字符串。将脚本的内容直接添加到 .bash_logout 可以正常工作,尽管这看起来很混乱。想法?

1 个答案:

答案 0 :(得分:1)

在POSIX shell中,您不能在\xXX命令中使用printf转义符;你只能使用八进制表示法。使用.source执行当前bash进程的脚本,而不是使用POSIX shell。 bash seeyou也会有效。

符合POSIX标准的脚本版本会将第一行更改为:

ESC_SEQ="\033[38;5;"

当然,没有特别的理由让代码仅从.bash_logout POSIX兼容执行,因为文件本身特定于bash