scp コマンドを実行して DNS サーバーに構成ファイルをアップロードする TCL Expect スクリプトがあります。
#!/usr/bin/expect -f
set config "~/dnsmasq.conf"
spawn /usr/bin/scp "$config" [email protected]:/etc/dnsmasq.conf
expect {
-re ".*yes.*no.*" {
exp_send "yes\r"
exp_continue
}
-re ".*password.*" {
exp_send "$password\r"
expect {
-re ".*denied.*" {
exit 7
}
}
}
}
scpユーティリティが見つからない場合は、特定のエラーコードを返したいと思います。現在のスクリプトは状態 1 で終了します。スクリプトがステータス7で終了すると、アクセス拒否エラーであることがわかっているため、問題を処理できます。 Apache ログに表示されるエラーは次のとおりです。
couldn't execute "/usr/bin/scp": no such file or directory
while executing
"spawn /usr/bin/scp "$config" [email protected]:/etc/dnsmasq.conf"
この時点でエラーコード5などをどのように返すことができますか?
答え1
最良の方法は、存在し実行可能であることを確認することです。
if { ! ([file exists /usr/bin/scp] && [file executable /usr/bin/scp])} {
puts stderr "/usr/bin/scp does not exist or is not executable"
exit 7
}
spawn /usr/bin/scp ...