2016-05-09 141 views
6

出於某種原因,我的shell腳本停止以彩色打印我的菜單,而實際上是打印字面顏色代碼。我以某種方式逃避了顏色編碼?字面上打印顏色代碼而不是實際顏色

腳本

#!/bin/bash 

function showEnvironments { 
echo -e "\e[38;5;81m" 
echo -e "  SELECT ENVIRONMENT  " 
echo -e "[1] - QA" 
echo -e "[2] - PROD" 
echo -e "\e[0m" 
} 

showEnvironments 

輸出

\ E [38; 5;81米

選擇環境

[1] - 分段

[2] - QA

\ E [0米

我使用的iTerm Mac OSX上和TERM環境變量設置爲xterm-256color

+0

你應該編輯你的問題,包括你正在使用的終端模擬器和'TERM'環境變量的內容。 –

+0

TERM = xterm-256color TERM_PROGRAM = iTerm.app 這是你在找什麼? –

+0

是的。我編輯了您的問題以包含這些重要信息。我不使用Mac,因此我不知道如何配置iTerm來正確解釋ANSI轉義序列。 –

回答

4

有在echo -ebash 3.2.x中實施,這是船舶與Mac OS X的文件聲稱什麼\E(不\e)表示ESC幾個明顯的錯誤,但它們似乎也沒有工作。您可以使用printf代替:

printf "\e[38;5;81mfoo\e[0m\n" 

或使用(如你發現)\033來表示ESC。

更高版本的bash(絕對爲4.3,可能早期的4.x版本也是如此)解決此問題並允許使用\e\E

1

兩個可能的事情嘗試:

  • 運行stty sane重置終端設置
  • 檢查$TERM環境變量
4

兩種方法可以做到這一點:基準顏色直接或指定變量稍後在腳本中更容易引用它們。

cNone='\033[00m' 
cRed='\033[01;31m' 
cGreen='\033[01;32m' 
cYellow='\033[01;33m' 
cPurple='\033[01;35m' 
cCyan='\033[01;36m' 
cWhite='\033[01;37m' 
cBold='\033[1m' 
cUnderline='\033[4m' 

echo -e "\033[01;31m" 
echo -e "hello" 
echo -e "\033[00m" 

echo -e "${cGreen}" 
echo -e "hello" 
echo -e "${cNone}" 

我希望這會有所幫助。

1

我想通了。看起來,我用於顏色代碼的轉義字符在我的終端中無法識別。

基於http://misc.flogisoft.com/bash/tip_colors_and_formatting#colors1有效的轉義代碼:

\e 
\033 
\x1B 

當我改變了我的顏色。\ E [38:5:81米到\ 033 [38:5:81米它開始工作作爲預期。

感謝其他人的建議和幫助!