2011-08-09 47 views
1

我在終端中爲我的.profile製作文字ASCII藝術,並嘗試着色它。起初,我打算用cat命令和heredoc打印出我的藝術作品,但後來我無法使heredoc中的顏色起作用。所以我去了骯髒的修復,我使用echo -e爲每一行,然後着色它。如果有更好的方法,請讓我知道!現在,我遇到了這個問題。如何在 /終端之間添加顏色?

全貌:

_   _ 
__| |_ __ __ _| |__ 
/_` | ' \/ _` |// 
\__,_|_|_|_\__,_|_\_\ 

,我着色部分:

/ _` | ' \/ _` |// 

着色:

echo -e "\033[37m/ _\` |\033[36m ' \\\033[1;35m/ _\` |//"; 

輸出:

/ _` | ' \033[1;35m/ _` |// 

正如你所看到的,我試圖在\/之間插入一個新的顏色。 \字面上對待\033[1;35m。有沒有辦法在不改變圖像的情況下對\/之間的顏色進行着色?

另外,我正在使用Mac OSX Lion。

+1

嘗試5條而不是3'\\\\\ 033 [1; 35m /' –

+0

工作。 '\\'爲斜槓? '\\'換另一個斜線? '\ 033'爲逃生。爲什麼我需要2個斜槓?此外,將其作爲答案發布:) – Strawberry

+0

請更改您的問題的標題..這個標題只是比「PLease回答我的問題」更好一點。 – TMS

回答

1

嘗試用5條,而不是3 \\\\\033[1;35m/

至於爲什麼,慶典逃避\\\\\\然後回顯-e,再次逃脫它\。如果啓用set -x(跟蹤模式),您將看到bash處理後執行的命令(set + x將其禁用)。

2

而不是heredoc您可以使用Bash的$'string'功能,這使得可以直接使用ANSI C轉義序列來着色輸出。

man bash | less -p "\\$'string'" 

(
asciiart=$' 
    _   _ 
__| |_ __ __ _| |__ 
\033[37m/ _` |\033[36m \' \\\033[1;35m/ _` |//\033[m 
\\__,_|_|_|_\\__,_|_\\_\\ 
' 
echo "$asciiart" | sed '1d;$d' 
) 

爲提高可讀性,您可能要嘗試使用figlet。

http://rudix.org/packages-def.html#figlet

0

什麼簡單地使用

printf "\e[37m/ _\` |\e[36m \....\n" 

,而不是所有的麻煩逃避問題搞亂的POSIX printf的幾行?