私の目標は、expectを使用してsftpサーバー上のファイルの名前を変更することです。名前の変更が失敗した場合は、expectを終了してステータスコード1を返します。
私のexpectスクリプトは正常に機能します-名前の変更に成功しました。
名前の変更が失敗した場合にステータスコードで終了する方法を理解できません。
ubuntu@ip-10-0-0-138:~$> cat expect_script.txt
spawn sftp -o "StrictHostKeyChecking no" [email protected]
expect "password:"
send "somesupersecretpassword\n"
expect "sftp>"
send "rename /var/www/static/tmp-93121715.mp4 /var/www/static/91329728.mp4\n"
expect "sftp>"
send "rename /var/www/static/91329728.mp4 /var/www/static/tmp-93121715.mp4\n"
expect "sftp>"
send "bye\n"
expect "#"
exit
スクリプトを実行したときの出力は次のとおりです。
ubuntu@ip-10-0-0-138:~$> expect -f expect_script.txt
spawn sftp -o StrictHostKeyChecking no [email protected]
[email protected]'s password:
Connected to nginx.localvpc.
sftp> rename /var/www/static/tmp-93121715.mp4 /var/www/static/91329728.mp4
rename /var/www/static/tmp-93121715.mp4 /var/www/static/91329728.mp4
sftp> rename /var/www/static/91329728.mp4 /var/www/static/tmp-93121715.mp4
rename /var/www/static/91329728.mp4 /var/www/static/tmp-93121715.mp4
sftp> bye
bye
ubuntu@ip-10-0-0-138:~$>
名前の変更が失敗した場合にリターンコードゼロで終了するために私ができることを誰かが提案できますか?
ボーナスの質問... expectスクリプトの最後で終了する正しい方法は何ですか?これらの1つですか?
exit
close
expect eof
ありがとう!
そのテキストを照合して操作することにより、名前変更の失敗をチェックする必要があります。これは、proc
(TCLがサブルーチンまたは関数と呼ぶもの)に抽象化できます。
spawn ...
set ret 0
expect "sftp>"
proc sftp_rename {from to} {
global ret
send "rename $from $to\n"
expect {
-ex "Couldn't" { set ret 42; exp_continue }
"sftp>"
}
}
sftp_rename /var/www/static/tmp-93121715.mp4 /var/www/static/91329728.mp4
sftp_rename /var/www/static/91329728.mp4 /var/www/static/tmp-93121715.mp4
send "bye\n"
expect eof
exit $ret
その時点で接続expect eof
がなくなると予想されるので、使用しsftp
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加