Unix命令失败但仍返回状态0

时间:2016-11-29 13:19:03

标签: shell unix

unzip /test_data/sample.ZIP -d /data/Traget/
if [ "$?" = 1 ]; then
    echo " Unzipping of files failed"
    exit 1
fi

脚本正在归档数据并尝试在提到的位置写入,但目录/ data / Traget /无权写入,因此脚本失败....但它没有抛出状态1。 请有人帮忙

谢谢

2 个答案:

答案 0 :(得分:0)

它比这简单得多:

set -e
set -o pipefail

unzip /test_data/sample.ZIP -d /data/Target/

您编写的所有Bash脚本都应从这两个选项开始。他们所做的是在任何单个命令失败的情况下终止脚本并出现错误。

它与可恶的" On Error Resume Next"相反。来自VBA,如果有人记得的话!

但如果您真的需要在任何地方编写繁琐的错误处理代码,那么就这样做:

if ! unzip /test_data/sample.ZIP -d /data/Traget/; then
    echo " Unzipping of files failed"
    exit 1
fi

答案 1 :(得分:0)

你应该改变你的逻辑。 unzip在成功时返回0,并在出错时返回任意数量的退出代码。所以吧:

unzip /test_data/sample.ZIP -d /data/Traget/
if [ "$?" -ne 0 ]; then
    echo " Unzipping of files failed"
    exit 1
fi

您可以通过运行轻松检查解压缩返回的内容 在命令之后echo $?您想知道退出状态。

这是我运行类似命令时会发生什么:

$ unzip dd.zip  -d /tmp/a/b/
Archive:  dd.zip
error:  cannot create /tmp/a/b/filename
        Permission denied
$ echo $?
50

因此,当它以这种方式失败时,解压缩返回50。