2

这是我的脚本:

#!/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 作业运行,我不想只产生最终坐着的进程。

有没有办法做到这一点?

编辑:

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

4

2 回答 2

2

添加 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"
于 2013-01-17T04:34:07.360 回答
0

好吧,如果你可以使用 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 发行版中的软件包提供)。

于 2013-01-21T11:35:50.143 回答