我在网站上找到了此问题,但找不到解决方案。问题与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}

10-06 06:21