2012-10-14 54 views
4

作爲標題,有沒有什麼辦法可以在expect shell中使用彩色文本? 像下面的shell腳本echo命令一樣。期望殼牌的彩色文本

echo -e "\033[32m Hello World" 

回答

6

我一直在忍受這個問題的答案很長一段時間,現在我想我終於得到了答案。

工作原理是利用033發送< ESC>字符,然後[發送用分號隔開ANSI轉義碼,然而由於[是它也需要用反斜槓轉義特殊字符。然後,您可以繼續發送ANSI序列並使用m進行分隔。

例ANSI斷裂序列

  • 0復位/正常所有屬性關閉

  • 1粗體或增加的強度

  • 4下劃線:單

  • 30設置文字顏色黑色

  • 31集文字顏色紅

  • 32集的文字顏色綠色

全部列表可以在這裏找到: http://en.wikipedia.org/wiki/ANSI_escape_code

例子:

puts "\033\[01;31m" # This will turn text red 
puts "~~~This text is red and bold\n" 
puts "\033\[0;32m" # This will turn text green 
puts "This text is green and bold switched off\n" 

但是它不」 t似乎與-nonewline選項一起工作,這有點煩人。然而,send_user命令似乎處理事情好了很多,並在控制好了很多:

send_user "\033\[01;31mRed bold \033\[0;32mGreen again" 

,你甚至可以用變量相結合這使輸出更具可讀性:

set green "\033\[0;32;40m" 
set red "\033\[1;31m" 
send_user "${red}Red bold ${green}Green again" 
+1

生活保護的人:) ,這非常好。對於想要重置的那個,我創建了一個普通變量並且放置了正常的「\ 033 \ [0; 0m」 –