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
).大多数这些有一个选项,告诉他们仍要使用的颜色,用于精确这种情况下(例如--color
为ls
).请查阅您的git
文档,看它是否也有这样的覆盖选项.
对于特定于 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)