如何在 Vagrant provision 脚本中以自定义颜色输出错误?
How to output error in custom color in Vagrant provision script?
我希望我的 Vagrant 供应脚本 运行 一些检查,如果他们不满意,将需要用户操作。就像:
if [ ! -f /some/required/file ]; then
echo "[Error] Please do required stuff before provisioning"
exit
fi
但是,只要这不是真正的错误,我就会得到绿色打印的 echo
。我希望我的输出是红色的(或者至少是不同的颜色)以提醒用户。
我试过了:
echo "3[31m[Error] Blah blah blah"
在本地有效,但在 Vagrant 输出中,颜色代码被转义,我得到它以绿色回显。
这可能吗?
Vagrant 命令默认使用 --no-color
选项运行。您可以尝试使用 --color
设置颜色。 Vagrant 的环境变量记录在案 here.
发生这种情况是因为一些工具将它们的一些消息写入 stderr
,然后 Vagrant 将其解释为错误并以红色打印。
并非所有终端都支持 ANSI 颜色代码,Vagrant 不关心这一点。话虽如此,我不建议通过将单词发送到 stderr
来给它着色,除非它是一个错误。
要实现这一点,您只需:
echo "Your error message" > /dev/stderr
您需要使用 keep_color true 才能正常工作;
config.vm.provision "shell", keep_color: true, inline: $echoes
$echoes = <<-ECHOES
echo "\e[32mPROVISIONING DONE\e[0m"
ECHOES
来自https://www.vagrantup.com/docs/provisioning/shell.html
keep_color (boolean) - Vagrant 根据输出是来自 stdout 还是 stderr 自动将输出着色为绿色和红色。如果这是真的,Vagrant 将不会这样做,允许输出脚本中的原生颜色。
我希望我的 Vagrant 供应脚本 运行 一些检查,如果他们不满意,将需要用户操作。就像:
if [ ! -f /some/required/file ]; then
echo "[Error] Please do required stuff before provisioning"
exit
fi
但是,只要这不是真正的错误,我就会得到绿色打印的 echo
。我希望我的输出是红色的(或者至少是不同的颜色)以提醒用户。
我试过了:
echo "3[31m[Error] Blah blah blah"
在本地有效,但在 Vagrant 输出中,颜色代码被转义,我得到它以绿色回显。
这可能吗?
Vagrant 命令默认使用 --no-color
选项运行。您可以尝试使用 --color
设置颜色。 Vagrant 的环境变量记录在案 here.
发生这种情况是因为一些工具将它们的一些消息写入 stderr
,然后 Vagrant 将其解释为错误并以红色打印。
并非所有终端都支持 ANSI 颜色代码,Vagrant 不关心这一点。话虽如此,我不建议通过将单词发送到 stderr
来给它着色,除非它是一个错误。
要实现这一点,您只需:
echo "Your error message" > /dev/stderr
您需要使用 keep_color true 才能正常工作;
config.vm.provision "shell", keep_color: true, inline: $echoes
$echoes = <<-ECHOES
echo "\e[32mPROVISIONING DONE\e[0m"
ECHOES
来自https://www.vagrantup.com/docs/provisioning/shell.html
keep_color (boolean) - Vagrant 根据输出是来自 stdout 还是 stderr 自动将输出着色为绿色和红色。如果这是真的,Vagrant 将不会这样做,允许输出脚本中的原生颜色。