Expect
期望 - 如果命令失敗,如何以狀態碼 1 退出?
我的目標是使用期望重命名 sftp 伺服器上的文件,如果重命名失敗,退出期望返回狀態程式碼 1
我的期望腳本工作正常 - 它成功重命名。
如果重命名失敗,我無法弄清楚如何使用狀態碼退出。
ubuntu@ip-10-0-0-138:~$> cat expect_script.txt spawn sftp -o "StrictHostKeyChecking no" ubuntu@nginx.localvpc 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 ubuntu@nginx.localvpc ubuntu@nginx.localvpc'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:~$>
如果重命名失敗,任何人都可以建議我可以做什麼以返回程式碼零退出?
額外的問題……在我的期望腳本結束時退出的正確方法是什麼?是其中之一嗎?
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
連接在那時消失。