将 git 输出捕获到变量中

将 git 输出捕获到变量中

如果我在子 shell 中运行命令,我可以将标准输出收集到变量中,例如:

var=$(echo 'hello world')
echo $var

将按预期打印“hello world”。

如果我添加颜色和新行,这也可以:

var=$(echo "Text in \n\e[34mBlue")
echo -e $var

按预期在下一行打印“蓝色文本”,并带有“蓝色”一词。

但是,如果我尝试使用 git 输出,例如

var=$(git status)
echo $var

它丢失了所有换行符和颜色。

如何捕获 git 命令的输出并稍后打印,同时保留 bash 中的格式和颜色?

答案1

默认值为git的color.ui配置is auto,仅在输出到 TTY 时使用颜色。您可以在配置中进行更改,以always使输出带有颜色。

对于您的用例最有用的是允许覆盖配置值-c的选项git仅适用于当前命令。您可以使用它来color.ui设置always

var=$(git -c color.ui=always status)
printf '%s\n' "$var"

请注意,在你的第二个例子中

var=$(echo "Text in \n\e[34mBlue")
echo -e $var

它实际上是echo -e导致颜色出现的行 - 命令替换内部没有解释转义码echo,反斜杠和其他字符实际上就在那里。这并不是说颜色代码在当时就被存储了,并且在它们产生时就被遗忘了git——在一种情况下,它们是在最后创建的,而在另一种情况下,它们根本没有创建。

答案2

尝试这个:

var=$(git status)
echo "$var"

这是关于 bash 引用机制的,没有""引用周围$varnewline内部被视为令牌分隔符,就像 一样blank space请参阅 bash 手册以获取更多信息

相关内容