我有一个简单的“主要”shell脚本,它执行一些准备工作,然后调用另一个将脚本上传到ftp站点的shell脚本。我想知道如何等待并检查被调用的shell脚本的退出代码,以及如何轻松检查FTP文件是否已成功上传并提供正确的退出代码(0或1)如何检查外部shell脚本退出代码
谢谢
主要脚本:
#!/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 = $读取退出值?然后使用主脚本中的退出$ ftp_exit_code打印它。我已经更新了上面的脚本以合并您的建议。 ....我不允许使用scp(不是我的决定) – TrekOnTV2017