我有一個簡單的「主要」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