我正在使用cron运行一个通过SFTP连接到另一台服务器并上传文件的脚本。偶尔,我会收到错误:执行send " ls r r " 时, Spawn-id-exp7-not-open,并且脚本将停止执行(不会发送文件)。但是,大多数情况下,脚本将没有错误。
以下是我用来连接的脚本:
#!/bin/bash
HOST="removed.com:API"
USER="user"
PASS="removed"
VAR=$(expect -c "
spawn sftp -o "BatchMode no" -b /var/www/prep/cmd -P 13266 $USER@$HOST
expect "Password:"
send "$PASSr"
expect "\\$"
send "lsr"
expect -re "$USER.*"
send "exit"
")
echo "==============="
echo "$VAR"
下面是我连接(CMD)之后运行的脚本:
put "/var/www/prep/1.xml"
put "/var/www/prep/2.xml"
我看了一个类似的问题:Send:Spawn ID EXP7不打开,但没有帮助我。也许连接在CMD脚本运行之前结束?
感谢您的帮助!
您正在将sftp与 -b
一起使用。因此,一旦提供密码,就不会进行交互:SFTP将从批处理文件和退出中读取命令。
从"人"页面:
-b batchfile
批处理模式从输入batchfile而不是stdin读取一系列命令。由于缺乏用户交互,因此应与非交互性身份验证一起使用。可以使用" - "的批处理表示标准输入。如果以下任何命令失败,则SFTP将中止:获取,放置,重命名,LN,RM,MKDIR,CHDIR,LS,LS,LCHDIR,CHMOD,CHMOD,CHOWN,CHGRP,CHGRP,LPWD,LPWD,DF,SYMLINK,SYMLINK和LMKDIR。可以通过将命令抑制错误的终止,通过将命令以" - "字符前缀(例如
。-rm /tmp/blah*
)。