我想就检查shell脚本的错误发表意见。我支持的系统包含一个简单的shell脚本,由另一个应用程序(java)多次运行。 java调用一个执行ftp连接打开的shell脚本,移动本地目录,mget命令,最后是一个bye命令。然后检查$?在再见命令之后。
我知道首先这段代码是可疑的,因为它应该只检查再见命令,但它会间歇性地导致错误。我已经要求UNIX管理员查看系统中是否有日志错误,但是他们说没有。
基本上脚本的一般结构是:
sftp -oPort=<port forwarding port> <ip and user> <<==
lcd <some variable>
mget <some variable>
bye
rtn=$?
if [ ${rtn} != 0 ]
then
exit 1
fi
exit 0
为什么$?有时会返回非零值?
答案 0 :(得分:3)
退出代码非零的原因:
如果您想故意忽略正在使用的命令中的错误,那么您可以在命令前添加-
,例如: mget
变为-mget
尝试调试时要做的一件重要事情是捕获命令的输出并在命令失败时转储它,例如。
trap 'rm -f /tmp/logfile.$$' EXIT HUP
sftp -oPort=<port forwarding port> <ip and user> >&/tmp/logfile.$$ <<EOM
lcd <some variable>
mget <some variable>
bye
EOM
rtn=$?
if ((rtn != 0)); then
cat /tmp/logfile.$$
exit 1
fi
exit 0
当脚本终止时,trap
会删除文件。