【问题标题】:Shell script with SFTP and mget finishing before downloads are complete在下载完成之前完成 SFTP 和 mget 的 Shell 脚本
【发布时间】:2012-12-31 13:53:26
【问题描述】:

这是我的脚本:

#!/usr/bin/expect
spawn /usr/bin/sftp user@place
expect "password:"
send "mysecret\n"
expect "sftp>"
send "mget dir/*.csv\n";
expect "sftp>"
send "quit\n"

它开始下载,但几秒钟后,它发送退出命令并在下载完成之前退出程序。

我成功让它停止的唯一方法是输入一个“交互”命令,但因为我想将它作为一个 cron 作业运行,我不想只产生最终坐着的进程。

有没有办法做到这一点?

编辑:

有人会问我为什么没有密钥设置...这是供应商允许我使用的唯一方法。

【问题讨论】:

    标签: bash shell ftp sftp expect


    【解决方案1】:

    添加 line set timeout -1 似乎已经解决了这个问题

    整个脚本应该是这样的:

    #!/usr/bin/expect
    set timeout -1
    spawn /usr/bin/sftp user@place
    expect "password:"
    send "mysecret\n"
    expect "sftp>"
    send "mget dir/*.csv\n";
    expect "sftp>"
    send "quit\n"
    

    【讨论】:

      【解决方案2】:

      好吧,如果你可以使用 Perl:

      use Net::SFTP::Foreign;
      
      my $sftp = Net::SFTP::Foreign->new('user@place', password => 'mysecret');
      $sftp->mget("dir/*.csv", '.',
                   on_error => sub {
                     warn "unable to copy '$_[1]{filename}':".$sftp->error."\n";
                   });
      

      您必须安装 Net::SFTP::ForeignIO::Pty(也可作为软件包在多个 linux 发行版中使用)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 1970-01-01
        • 2011-03-14
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多