0

いくつかの準備を行ってから、ファイルをftpサイトにアップロードする別のシェルスクリプトを呼び出す単純な「メイン」シェルスクリプトがあります。呼び出されたシェルスクリプトの終了コードを待って確認する方法と、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 $!
4

2 に答える 2

3

あなたが探しているのは、FTPスクリプトの下部ではexit $?なくだと思います。echo $!

を使用echoすると、単に出力されますstdoutが、終了コードは返されません(したがって、exit使用する必要があります)。スペシャルは、プロセスIDであるでは$?なく、前のプロセスの戻りコードです。$!

于 2012-11-20T19:21:56.030 に答える
0

私は、ftpアップロードを再確認し、適切な終了コードを提供するソリューションを考え出しました。

... ftp upload first ... then ...

# this is FTP download double-check test
ftp -n -v $FTP_HOST <<SCRIPT >> ${FTPLOGFILE} 2>&1
quote USER $FTP_USER
quote PASS $FTP_PASS
binary
prompt off
get $REMOTE_FILE $TEST_FILE
bye
SCRIPT

#check to see if the FTP download test succeeded and return appropriate exit code
if [ -f "$TEST_FILE" ]; then
  echo "... OK FTP download test went fine. Execution may continue"
  exit 0
else
  echo "... ERROR FTP download test failed. Execution cannot continue"
  exit 1
fi
于 2012-11-21T17:37:31.353 に答える