簡體   English   中英

捕獲彩色輸出到bash變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM