我有一个OpenSSH sftp
脚本,用于将文件从SFTP服务器(Solaris)传输到应用程序服务器(Linux)。这里的场景是从不同的位置进行传输,同一文件被转移备份到SFTP服务器的不同位置。但是,如果由于文件不可用而导致任何传输失败,则不会继续执行剩余的sftp
命令。相反,它只是出自代码。以下是剧本。
export SSHPASS=*******
/usr/local/bin/sshpass -e sftp -oPort=22 -oBatchMode=no -b - rkwlahtt@10.204.140.14 << !
cd /home/rkwlahtt/Inbound
mget *.*
rm *.*
cd /home/rkwlahtt/Inbound/Adhoc
mget *.*
rm *.*
cd /home/rkwlahtt/Archive/Inbound
mput *.TXT
mput *.txt
cd /home/rkwlahtt/Archive/Adhoc
mput *.xlsx
bye
!
当我在mget
文件夹中尝试/home/rkwlahtt/Inbound
并且文件不存在时,在上面的脚本中,它只是来自sftp
代码而不是下一个命令cd /home/rkwlahtt/Inbound/Adhoc
和mget
。 mput
也是如此。
这是我们第一次从同一代码中的不同位置转移。这在我们的转移中产生了问题。
请让我知道如何解决此问题。
答案 0 :(得分:3)
您可以使用-
前缀在每个命令的基础上抑制错误中止:
-mget *.*
另一个选择是删除-b -
开关。
任何故障后,交换机都会导致中止。
即使没有开关,您仍然可以使用输入重定向来提供命令,正如您所做的那样。
虽然你需要确保没有命令会要求任何输入。因为那时你的一些命令将被用作输入而不是被执行。