在bash脚本中检查所有命令的退出代码。

19 浏览
0 Comments

在bash脚本中检查所有命令的退出代码。

考虑这样一种情况,我有一个非常长的bash脚本,其中包含多个命令。有没有一种简单的方法可以轻松检查所有命令的退出状态。这样,如果有失败的命令,我可以显示哪个命令失败了以及它的返回码。

我的意思是,我不想像下面的代码一样逐个检查每个命令的返回状态:

my_command
if [ $status -ne 0 ]; then
    #错误情况
    echo "执行" my_command "时出错,返回码:" $?
    exit 1
fi

0
0 Comments

在bash脚本中,我们经常需要检查命令的退出代码来判断命令是否成功执行。然而,有时候我们希望在命令失败时能够显示出失败的命令,以便于调试和错误管理。下面我们将讨论这个问题的出现原因以及解决方法。

首先,我们可以使用trap "cmd" ERR的方式来在命令失败时执行cmd。然而,这种解决方法有一些缺点。例如,它无法捕捉到管道中的命令失败。

简而言之,更好的做法是根据具体情况来进行错误管理。

那么,在这种情况下,是否存在一种简单的方法来显示失败的命令呢?

解决方法如下:

#!/bin/bash
# 定义一个函数,用于处理命令失败时的操作
handle_error() {
  local command="$1"
  local exit_code="$2"
  
  echo "Command '$command' failed with exit code $exit_code"
}
# 执行命令1
command1
# 检查命令1的退出代码
if [ $? -ne 0 ]; then
  handle_error "command1" $?
fi
# 执行命令2
command2
# 检查命令2的退出代码
if [ $? -ne 0 ]; then
  handle_error "command2" $?
fi
# 执行命令3
command3
# 检查命令3的退出代码
if [ $? -ne 0 ]; then
  handle_error "command3" $?
fi

上述代码中,我们定义了一个handle_error函数,用于处理命令失败时的操作。在每个命令执行后,我们使用$?来获取命令的退出代码,并与0进行比较。如果退出代码不等于0,则表示命令执行失败,我们调用handle_error函数来显示失败的命令和退出代码。

这样,我们就可以在bash脚本中检查所有命令的退出代码,并在命令失败时显示出失败的命令。这种方法更加灵活,能够针对每个命令进行特定的错误处理。

0
0 Comments

问题:如何在bash脚本中检查所有命令的退出代码?

问题的原因:在bash脚本中,有时我们需要执行多个命令,并且希望检查每个命令的退出代码以便进行错误处理。然而,bash默认只检查最后一个命令的退出代码。为了解决这个问题,我们可以编写一个函数来检查每个命令的退出代码,并进行相应的处理。

解决方法:我们可以使用以下的bash脚本来实现检查所有命令的退出代码:

function test {
    "$@"
    local status=$?
    if [ $status -ne 0 ]; then
        echo "error with $1" >&2
    fi
    return $status
}
test command1
test command2

这段脚本中定义了一个名为`test`的函数,该函数可以接受任意的命令作为参数。在函数内部,通过`"$@"`来执行传入的命令,并将命令的退出代码保存到变量`status`中。然后,通过判断`status`是否为0来确定命令是否执行成功。如果命令的退出代码不为0,则输出错误信息到标准错误输出(stderr)。最后,函数返回命令的退出代码。

这个解决方法可以确保在执行多个命令时,每个命令的退出代码都会被检查,并且可以根据需要进行错误处理。这在编写复杂的bash脚本时非常有用。

参考来源:[stackoverflow.com/a/5195741/862225](https://stackoverflow.com/a/5195741/862225)

0
0 Comments

问题的出现原因是作者想要在bash脚本中检查所有命令的退出代码。解决方法是使用$?测试退出代码的值,或者在脚本的顶部加入set -e命令,使其在任何错误命令出现时退出。

作者介绍了一种编程方法,即对所有内容使用set -xe,并在第一个错误出现时退出并向用户报告所有命令。作者还更新了帖子以反映这一点。

如果想要在set -xe下固定一个命令不触发程序在错误时退出,可以使用bad_command || true命令。

0