防止 bash 脚本以非零退出代码退出

防止 bash 脚本以非零退出代码退出

我有一个 bash 脚本,如果命令的退出代码大于 0,我需要阻止该脚本退出。这样做的目的是回显自定义错误消息。我当前的代码失败,因为退出代码 > 0 并且我的 echo 语句永远不会被执行。有没有办法默默地忽略非零状态并打印我的自定义错误消息?

代码:

#/bin/bash

# Faulty command
lllll
echo $?
   
if [ "$?" -gt 0 ]; then
    echo "Please enter a valid command."
fi

输出:

./test.sh: line 4: lllll: command not found
127

答案1

你误解了这个问题。如果您通过添加set -e到脚本中明确告知 Bash,它只会在出现错误时退出。这里发生的事情是该变量$?保存最后一个命令运行的退出代码。在您的情况下,最后一个命令是echo $?so,因为 是if [ "$?" -gt 0 ]在 后面echo $?,所以自从成功以来, 的值$?将为 0 echo。尝试这样:

#!/bin/bash

# Faulty command
lllll
   
if [ "$?" -gt 0 ]; then
    echo "Please enter a valid command."
fi

运行上面的脚本会产生:

$ foo.sh
/home/terdon/scripts/foo.sh: line 4: lllll: command not found
Please enter a valid command.

更简洁的方法是隐藏错误消息:

#!/bin/bash

# Faulty command
lllll 2> /dev/null
   
if [ "$?" -gt 0 ]; then
    echo "Please enter a valid command."
fi

其产生:

$ foo.sh
Please enter a valid command.

当然,您甚至不需要if这样的东西:

#!/bin/bash

# Faulty command
lllll 2> /dev/null || echo "Please enter a valid command."

相关内容