2011-04-13 201 views
2

我seacrhed网站对于这个问题,但找不到solution.Problem有关sftp.I正在运行一个脚本,accepets 7个参数,不SSH和上传文件对SFTP server.Parameters i电源为─服务器,用户,端口,source_directory,target_directory,source_file和tager_file。 如果一切顺利,文件没有任何错误和返回代码上传0 问题是,如果任何一个参数是错误的,就像目标目录,即使在当时的脚本返回0作为返回value.Here的脚本如何looks-SFTP返回代码

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应该返回status.But状态总是为0。 任何想法,如何解决这个问题? 非常感谢提前。

回答

5

您需要在批处理模式下运行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} 
+0

非常感谢。我会很快尝试,并将结果放在这里。 – 2011-04-13 10:00:09

+0

Thanks.It的作品。 – 2011-04-13 10:56:12

+0

嗨,我M在重命名该文件得到错误。“没有这样的文件或目录” – 2011-04-13 12:48:40