2016-09-22 28 views
-2

私はBash with Expectを使用するスクリプトプログラムを持っています。 このシェルスクリプトはSFTP Uploadを実行しています。SFTP Bashを使用してアップロード

ここにスクリプトがあります。

#!/usr/bin/expect -f 

/usr/bin/expect << EOD 
spawn sftp [email protected] 
#expect "*Are you sure you want to continue connecting*" {send "yes\r" } 
expect "Password:*" 
send $pwd\r 
expect "sftp> " 
send "lcd $locdirectory\r" 
expect "sftp> " 
send "cd $remDirect\r" 
expect "sftp> " 
send "put $file\r" 
expect "sftp> " 
send "bye\r" 
expect EOD 

このスクリプトを実行している間は、bye文の後に無限ループになります。

端末に「Y」印字を続け、終了しません。

なぜそれが起こっているのでしょうか。

+0

'lftp'のような自動化された使用のために設計され、文書化され、サポートされているクライアントの使用を検討しましたか? (はい、それはSFTPをサポートしています)。 'expect'を使って自動化されていないプログラムをスクリプト化することは、あなたのスクリプトを壊すような形で将来のバージョンが変更されるリスクをはるかに高めます。 –

+0

また、これは、** bashではなくexpectを使用した**のみです。 –

+0

@CharlesDuffy - 'expect << EOD'はシェル構文です。 :) – pynexj

答えて

0

あなたは、あなたはbashスクリプトを持っていない#!/usr/bin/expectを使用している場合:「条件付きが期待に、道を

/usr/bin/expect << EOD 

行を削除して

またwhjmのアドバイス@取ります持続する?" is

expect { 
    "*Are you sure you want to continue connecting*" { 
     send "yes\r" 
     exp_continue 
    } 
    "Password:*" {send $pwd\r} 
} 
+0

ありがとうグレン。私はスクリプトに関する知識が非常に限られています。あなたの提案をありがとう。 –

0

私はこの問題を解決できました。私はスクリプトの下のコメントを外す必要がありました。

#expect "*Are you sure you want to continue connecting*" {send "yes\r" } 

私のサーバーは、送信先サーバのキーを持っていなかった、だからではなく、それがためにプロンプ​​トされたパスワードの入力を求めるの「あなたは、接続を続行しますか」?これには適切なものは何もなかった。

関連する問題