捕获彩色输出到bash变量

Kos*_*tas 11 variables bash colors

我想从git status变量中捕获颜色输出并稍后打印.

到目前为止,我已经达到:

status=$(git status -s)
echo -e "$status"
Run Code Online (Sandbox Code Playgroud)

上面的脚本保持换行完整(thx到捕获多行输出到Bash变量)但从输出中删除颜色.

有没有办法保持变量中的颜色并回显它?

Kil*_*oth 11

问题不是bash在存储文本之前剥离了颜色输出,但是它首先git拒绝生成彩色输出,可能是因为它可以告诉它的STDOUT不是终端.许多命令都这样做(例如ls).大多数这些有一个选项,告诉他们仍要使用的颜色,用于精确这种情况下(例如--colorls).请查阅您的git文档,看它是否也有这样的覆盖选项.


vmr*_*rob 6

对于特定于 git 的解决方案,您可以通过配置选项强制 git 提供颜色color.status。要覆盖此单个命令的配置条目,请使用git -c color.status=always status

请记住,以这种方式捕获的命令输出不一定包含尾随换行符,因此如果您打算稍后打印它,则需要添加它。

out=$(git -c color.status=always status)
printf "$out\n"
Run Code Online (Sandbox Code Playgroud)

对于与不提供颜色覆盖的其他程序一起使用的更通用的解决方案,更好的方法是使用脚本,如可以通过 shell 重定向捕获彩色输出吗?

在这些情况下,您需要使用status=$(script -q /dev/null git status | cat)