2011-07-26 57 views

回答

8

問題不在於bash在存儲文本之前去掉了顏色輸出,而是git拒絕在第一個位置生成彩色輸出,可能是因爲它可以告訴它的STDOUT不是終端。許多命令都是這樣做的(例如ls)。其中大多數都有一個選項,告訴他們無論如何都使用顏色,以用於恰好在這種情況下(例如--colorls)。無論它是否也有這樣的覆蓋選項,請參閱您的git文檔。

+0

真。我將color.ui從true改爲always,並且工作正常。 – Kostas

+0

對我來說,我需要將'color.status'改爲always,而不是'color.ui'。 – ndbroadbent

1

對於git特定的解決方案,您可以強制git通過color.status配置選項提供顏色。要覆蓋此單個命令的配置條目,請使用git -c color.status=always status

請記住,以這種方式捕獲的命令輸出不一定包含尾隨換行符,因此如果您打算稍後打印它,則需要添加。

out=$(git -c color.status=always status) 
printf "$out\n" 

對於與不提供顏色覆蓋其他程序的工作原理更通用的解決方案,更好的方式來做到這一點是有腳本在Can colorized output be captured via shell redirect?

在這種情況下所示,你會想使用status=$(script -q /dev/null git status | cat)

1

由於基利安Foth提到:

「請諮詢您的git文檔是否也有這樣的覆蓋選項」

Git的文件說,(http://git-scm.com/book/en/Customizing-Git-Git-Configuration#Colors-in-Git):

「如果你想在被重定向輸出色碼,你能傳遞--color標誌Git命令來迫使它使用顏色代碼「

使用git版本1.9.2,我嘗試了」git status --color「和」git --color status「,但沒有一個似乎有該標誌有效。可能還沒有實施?

然而,捕捉ls作品的彩色輸出,這樣的:

IFS="" 
output=$(ls -l --color) 
echo -e "$output"