首页 > 解决方案 > Bash exit 1 是否应该在终端上显示任何内容?

问题描述

如果另一个脚本或进程,例如 Gitlab .gitlab-ci.yml 文件中的顺序任务,依赖于 Bash 脚本退出而没有错误继续,或者无法退出进一步的执行;除了 exit 0 成功或 exit 1 捕获所有错误之外,Bash 脚本是否应该做任何事情?

下面的示例代码测试站点是否已成功部署。

#!/bin/bash

flag="false"
for i in {1..10}
    do
        response=$(curl -Is http://mysite/ | head -n 1 |  tr -d '\r')
        echo "$response"
        if [ "$response" = "HTTP/1.1 200 OK" ]; then
            echo "SITE UP"
            flag="true"
            exit 0
        fi
        sleep 1s
done
if [ "$flag" = "false" ]; then
    echo "SITE DOWN"
    exit 1
fi

一切都按预期 100% 工作,并且执行脚本./test-up.sh > /dev/null以抑制使用的调试回显(以及 curl 命令返回的文本)。

但是,如果脚本失败,则不会在命令行上打印关于错误的任何内容。命令行保持空白。如果遇到出口 0,也会发生同样的情况。

以上是有意的吗?

标签: bashshell

解决方案


回显到标准错误

echo "SITE DOWN" >&2

推荐阅读