如何在 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 将不会这样做,允许输出脚本中的原生颜色。