予想 - コマンドが失敗した場合、ステータスコード1で終了する方法は?

予想 - コマンドが失敗した場合、ステータスコード1で終了する方法は?

私の目標は、SFTPサーバーでファイルの名前を変更するために使用し、名前の変更に失敗した場合はステータスコード1で予想を終了することです。

私の予想されるスクリプトはうまくいきます。名前が正常に変更されました。

名前の変更に失敗した場合、ステータスコードで終了する方法はわかりません。

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:~$>

名前の変更が失敗した場合、戻りコード0で終了するために私ができる方法を提案できる人はいますか?

追加の質問...予想されるスクリプトの最後で終了する正しい方法は何ですか?そのうちの一つですか?

exit
close
expect eof

ありがとうございます!

ベストアンサー1

そのテキストを一致させ、それを操作して名前変更の失敗を確認する必要があります。これは抽象化できます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

おすすめ記事