bash - 如何使用函数以正确的方式退出 shell 脚本

标签 bash shell exit status

我想退出 shell 脚本。这是我在另一个函数中调用的函数

我这样做:

exit_script()
{
    if [[ $? -eq 0 ]] ; then
        echo "exit from script with success"
        exit
    else
        echo "exit with error..."
        exit
    fi
}

放置“退出”是否正确,或者我必须在“退出”之后放置退出状态(如“退出 1”)?

最佳答案

不带参数的

exit 使用前面命令的退出状态。对于第一种情况,这是可以的,但在第二种情况下,您应该以非零退出状态退出(对于非特定错误,1 是可以的),而不是从前面的 echo 中获得的 0 .

exit_script()
{
    if [[ $? -eq 0 ]] ; then
        echo "exit from script with success" >&2
        exit  # or exit 0, if you want to be specific
    else
        echo "exit with error..." >&2
        exit 1
    fi
}

您可能希望消息转到标准错误,但如果不这样做,只需删除我添加到每次调用 echo 中的 >&2 即可。

如果您想以与正在测试的退出状态相同的退出状态退出,则需要先保存它。

exit_script()
{
    status=$?
    if [[ $status -eq 0 ]] ; then
        echo "exit from script with success"
    else
        echo "exit with error..."
    fi >&2
    # Now you can just make one, all-purpose call to exit
    exit $status
}

关于bash - 如何使用函数以正确的方式退出 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37329344/

相关文章:

linux - 在 bash 生态系统中为逗号分隔的字符串添加后缀

bash - grep 重定向不匹配

bash - 如何使用 awk 或 sed 递归查找/替换字符串?

linux - 是否可以在没有 GUI 的情况下从控制台运行 node-webkit

java - 有没有一种方法可以使用 Cygwin 运行 shell 脚本并对 java 命令使用正确的路径分隔符

当用户强制我的程序退出时清理?

Java 控制台程序和 CTRL-C

Linux 语法错误

linux - 为什么 atime 不保存在 tar 中?

Maven - Mercurial/Svn - svn/hg 标记失败,退出代码为 255