我想在一个变量中捕获来自
git status
的颜色输出,并稍后将其打印出来。
目前我已经做到了:status=$(git status -s)
echo -e "$status"
以上脚本保留了换行符(感谢将多行输出捕获到Bash变量中),但是剥离了输出的颜色。
有没有一种方法可以保留颜色并将其回显到变量中?
git status
的颜色输出,并稍后将其打印出来。
目前我已经做到了:status=$(git status -s)
echo -e "$status"
以上脚本保留了换行符(感谢将多行输出捕获到Bash变量中),但是剥离了输出的颜色。
有没有一种方法可以保留颜色并将其回显到变量中?
对于与git相关的解决方案,您可以通过color.status
配置选项强制git提供颜色。要覆盖此单个命令的配置条目,请使用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)
IFS=""
output=$(ls -l --color)
echo -e "$output"
color.status
改成 always 而不是color.ui
。 - ndbroadbent