我想從git status
捕獲變量中的顏色輸出並稍後打印。將彩色輸出捕獲到bash變量
到目前爲止,我已經上來:
status=$(git status -s)
echo -e "$status"
上述腳本保持完好換行符(感謝Capturing multiple line output into a Bash variable),但剔除從輸出的顏色。
有沒有辦法將顏色保留在變量中並回顯它?
我想從git status
捕獲變量中的顏色輸出並稍後打印。將彩色輸出捕獲到bash變量
到目前爲止,我已經上來:
status=$(git status -s)
echo -e "$status"
上述腳本保持完好換行符(感謝Capturing multiple line output into a Bash variable),但剔除從輸出的顏色。
有沒有辦法將顏色保留在變量中並回顯它?
問題不在於bash在存儲文本之前去掉了顏色輸出,而是git
拒絕在第一個位置生成彩色輸出,可能是因爲它可以告訴它的STDOUT不是終端。許多命令都是這樣做的(例如ls
)。其中大多數都有一個選項,告訴他們無論如何都使用顏色,以用於恰好在這種情況下(例如--color
的ls
)。無論它是否也有這樣的覆蓋選項,請參閱您的git
文檔。
對於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)
由於基利安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"
真。我將color.ui從true改爲always,並且工作正常。 – Kostas
對我來說,我需要將'color.status'改爲always,而不是'color.ui'。 – ndbroadbent