我有一个 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."