我正在使用cron运行一个脚本,通过sftp连接到另一台服务器并上传文件。偶尔,我会收到错误:执行send \“ls \ 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 \"$PASS\r\"
expect \"\\\\$\"
send \"ls\r\"
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 not open处发现的类似问题,但它没有帮助我。也许连接在cmd脚本可以运行之前结束了?
感谢您的帮助!
答案 0 :(得分:2)
您正在使用-b
的sftp。因此,一旦提供密码,就没有交互:sftp将从批处理文件中读取命令并退出。
从手册页:
-b batchfile
批处理模式从输入批处理文件而不是stdin读取一系列命令。由于缺少用户交互,因此应与非交互式身份验证结合使用。批处理文件' - '可用于指示标准输入。如果以下任何命令失败,sftp将中止:get,put,rename,ln,rm,mkdir,chdir,ls,lchdir,chmod,chown,chgrp,lpwd,df,symlink和lmkdir。通过在命令前加上“ - ”字符(例如,
-rm /tmp/blah*
),可以逐个命令地抑制错误终止。