unzip /test_data/sample.ZIP -d /data/Traget/
if [ "$?" = 1 ]; then
echo " Unzipping of files failed"
exit 1
fi
脚本正在归档数据并尝试在提到的位置写入,但目录/ data / Traget /无权写入,因此脚本失败....但它没有抛出状态1。 请有人帮忙
谢谢
答案 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。