如何在Vagrant配置脚本中输出自定义颜色的错误?

时间:2018-03-20 19:09:19

标签: bash shell vagrant vagrant-provision

我希望我的Vagrant配置脚本运行一些检查,如果他们不满意则需要用户操作。很简单:

if [ ! -f /some/required/file ]; then
    echo "[Error] Please do required stuff before provisioning"
    exit
fi

但是,只要这不是真正的错误,我就会将echo打印成绿色。我希望我的输出为红色(或者至少是不同的颜色)以提醒用户。

我试过了:

echo "\033[31m[Error] Blah blah blah"

在本地工作,但在Vagrant输出上,颜色代码被转义,我得到它以绿色回显。

这可能吗?

3 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为有些工具会将一些消息写入stderr,然后Vagrant会将其解释为错误并以红色打印。

并非所有终端都支持ANSI色码,而Vagrant也不会照顾它。说,我不建议通过将单词发送到stderr来为其着色,除非是错误。

要实现这一目标,您可以简单地:

echo "Your error message" > /dev/stderr

答案 1 :(得分:1)

您需要使用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(布尔值)-流浪者根据输出是来自stdout还是stderr来自动将颜色输出为绿色和红色。如果是这样,Vagrant将不会执行此操作,从而允许输出脚本中的本机颜色。

答案 2 :(得分:0)

Vagrant命令默认使用--no-color选项运行。您可以尝试使用--color设置颜色。 Vagrant的环境变量记录在案here