我在网站上找到了此问题,但找不到解决方案。问题与sftp有关。我正在运行一个脚本,该脚本接受7个参数,执行SSH并将文件上传到sftp服务器上。我提供的参数是-server,user,port,源目录,目标目录,源文件和标记文件。
如果一切正常,文件上传没有任何错误,返回码为0。
问题是是否有任何参数错误,例如target_directory,即使脚本返回0作为返回值。以下是脚本的外观-
typeset targetUsername=$1
typeset targetHostname=$2
typeset sftpPort=$3
typeset sourceDir=$4
typeset targetDir=$5
typeset sourceFilename=$6
typeset targetFilename=$7
typeset cmdPut="put ${sourceDir}/${sourceFilename} ${targetTempDir}/${tmpFileNam
e}"
typeset cmdRen="rename ${targetTempDir}/${tmpFileName} ${targetDir}/${targetFile
name}"
sftp ${sftpOption} ${targetUsername}@${targetHostname} <<EOF
${cmdPut}
${cmdRen}
bye
EOF
sftpStatus=$?
sftpStatus应该返回状态。但是我总是将状态设为0。
任何想法,如何解决?
在此先感谢。
最佳答案
您需要以批处理方式运行sftp
,方法是将命令放在文件中并将其传递给sftp
。如果失败,那么您将获得退出代码1,成功则获得0。
这是一些示例代码:
# create a temporary file containing sftp commands
BATCH_FILE="/tmp/$(basename $0).$$.tmp"
echo ${cmdPut} > ${BATCH_FILE}
echo ${cmdRen} >> ${BATCH_FILE}
# run sftp in batch mode
sftp -b ${BATCH_FILE} ${sftpOption} ${targetUsername}@${targetHostname}
sftpStatus=$?
rm ${BATCH_FILE}