[英]Capturing colorized output to a bash variable
我想從變量中的git status
捕獲顏色輸出並稍后打印。
到目前為止,我已經達到:
status=$(git status -s)
echo -e "$status"
上面的腳本保持換行完整(thx到捕獲多行輸出到Bash變量 )但從輸出中刪除顏色。
有沒有辦法保持變量中的顏色並回顯它?
問題不是bash在存儲文本之前剝離了顏色輸出,但是git
拒絕首先產生彩色輸出,可能是因為它可以告訴它的STDOUT不是終端。 許多命令都這樣做(例如ls
)。 其中大多數都有一個選項,告訴他們無論如何都要使用顏色,以便在這種情況下使用(例如--color
用於ls
)。 請查閱您的git
文檔,看它是否也有這樣的覆蓋選項。
正如Kilian 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"
對於特定於git的解決方案,您可以通過color.status
配置選項強制git提供顏色。 要覆蓋此單個命令的配置條目,請使用git -c color.status=always status
。
請記住,以這種方式捕獲的命令輸出不一定包括尾隨換行符,因此如果您打算稍后打印它,則需要添加該換行符。
out=$(git -c color.status=always status)
printf "$out\n"
對於與其他不提供顏色覆蓋的程序一起使用的更通用的解決方案,更好的方法是使用腳本,如下所示可以通過shell重定向捕獲彩色輸出嗎?
在這些情況下,你會想使用status=$(script -q /dev/null git status | cat)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.