这是我的剧本:
#!/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"
它开始下载但几秒钟后,它会发送quit命令并在下载完成之前退出程序。
我成功停止的唯一方法是抛出一个“交互”命令,但因为我想将它作为一个cron作业运行,我不想只生成最终坐着的进程。
有没有办法实现这个目标?
编辑:
有人会问我为什么没有密钥设置......这是供应商允许的唯一方法。
答案 0 :(得分:2)
添加行集超时-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"
答案 1 :(得分: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::Foreign和IO::Pty(也可以作为多个Linux发行版中的软件包提供)。