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

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 に答える