1

Expectを使用して、 SFTP接続中にパスワード入力を自動化するのに少し助けがありました。

次に、putコマンドを発行しようとしましたが、状況は再び複雑になりました。私は次のコードを使用しています:

#!/usr/bin/expect
#!/bin/sh

expect -c "
spawn sftp remoteuser@*.*.*.*
expect \"remoteuser@*.*.*.*'s password:\"
send \"passwrd\r\"
interact "

echo "put output/data.xml\r"
echo "quit\r"

パスワードの入力とリモートサーバーへの接続は問題なく機能しますが、 put output/data.xmlコマンドを表示してSFTPプロンプトで実行するのに苦労しています。

私のecho"putoutput / data.xml\r"echo"quit\ r"の行は、テキストとして出力されるだけです。これはまったく驚くべきことではありませんが、他に何が機能するかはわかりません。

4

1 に答える 1

3

助けが必要なことは理解していますが、少なくとも読んでみてください。と言うときはexpect -c 'some stuff ...'、expectスクリプト全体-cをオプションのパラメーターとして指定しています。その後、Expectセッションは存在しなくなります。

interactまた、誰かがアドバイスすることを盲目的に適用するのではなく、コマンドが何をするかを理解するようにしてください。

とにかく、解決策:

expect  <<'END_EXPECT'
set timeout -1
spawn sftp remoteuser@1.2.3.4
expect "[Pp]assword:"
send "passwrd\r"
expect "whatever the sftp prompt looks like"
send "put output/data.xml\r"
expect "whatever the sftp prompt looks like"
send "quit\r"
expect eof
END_EXPECT

here-doc区切り文字は、最初に表示したときに引用符で囲まれていることに注意してください。そうすれば、シェルの拡張を受けることはありません。ヒアドキュメント全体が一重引用符で囲まれているようなものです。

于 2013-01-04T18:49:29.473 に答える