sftp返回代码

时间:2011-04-13 08:22:22

标签: sftp

我为此问题搜索了网站,但找不到解决方案。问题与sftp有关。我正在运行一个脚本,它接受7个参数,SSH并在sftp服务器上传文件。我提供的参数是服务器,用户,port,source_directory,target_directory,source_file和tager_file。 如果一切顺利,文件上传没有任何错误,返回代码为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。 任何想法,如何恢复这个? 非常感谢。

1 个答案:

答案 0 :(得分:8)

您需要在批处理模式下运行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}
相关问题