【发布时间】:2012-11-20 18:45:41
【问题描述】:
我有一个简单的“主”shell 脚本,它会做一些准备工作,然后调用另一个将文件上传到 ftp 站点的 shell 脚本。我想知道如何等待并检查被调用 shell 脚本的退出代码,以及如何轻松检查 FTP 文件是否实际成功上传并提供正确的退出代码(0 或 1)
谢谢
主脚本:
#!/bin/sh
# check for build tools first
FTP_UPLOAD_SCRIPT=~/Desktop/ftp_upload.sh
if [ -f "$FTP_UPLOAD_SCRIPT" ]; then
echo "OK 3/5 ftp_upload.sh found. Execution may continue"
else
echo "ERROR ftp_upload.sh not found at $FTP_UPLOAD_SCRIPT. Execution cannot continue."
exit 1
fi
# upload the packaged installer to an ftp site
sh $FTP_UPLOAD_SCRIPT
# check the ftp upload for its exit status
ftp_exit_code=$?
if [[ $ftp_exit_code != 0 ]] ; then
echo "FTP ERRORED"
exit $ftp_exit_code
else
echo $ftp_exit_code
echo "FTP WENT FINE"
fi
echo "\n"
exit 0
ftp_upload_script:
#!/bin/sh
FTP_HOST='myhost'
FTP_USER='myun'
FTP_PASS='mypass'
FTPLOGFILE=logs/ftplog.log
LOCAL_FILE='local_file'
REMOTE_FILE='remote_file'
ftp -n -v $FTP_HOST <<SCRIPT >> ${FTPLOGFILE} 2>&1
quote USER $FTP_USER
quote PASS $FTP_PASS
binary
prompt off
put $LOCAL_FILE $REMOTE_FILE
bye
SCRIPT
echo $!
【问题讨论】:
-
echo $!这样你就可以从 ftp 命令输出返回值,而不仅仅是 0? -
ftp_upload_script坏了!它总是退出0,表示它成功了。把exit 0去掉就行了,它会返回ftp的退出状态,如果不上传文件估计会失败。 (我已经好几年没用ftp了,也不知道它是否可靠地报告了它的状态。改用scp。) -
我尝试输出 echo $!但它返回(afaict)0,即使 fpt 脚本无法连接到主机(我已经更改了主机 IP,所以它不能)。我正在使用 ftp_exit_code=$?然后在主脚本中使用 exit $ftp_exit_code 打印它。我已更新上述脚本以纳入您的建议。 ....不幸的是,我不允许使用 scp(不是我的决定)
-
由于
echo $!成功(即使没有后台PID上报),脚本的退出状态为0,与echo的退出状态相同。跨度>