执行错误shell脚本时,spawn id exp7未打开

时间:2014-01-23 15:58:00

标签: bash unix sftp

我正在使用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脚本可以运行之前结束了?

感谢您的帮助!

1 个答案:

答案 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*),可以逐个命令地抑制错误终止。