TCL スクリプトのこの時点で特定のエラー コードを返すにはどうすればよいですか?

TCL スクリプトのこの時点で特定のエラー コードを返すにはどうすればよいですか?

DNS サーバーに設定ファイルをアップロードするための scp コマンドを実行する 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 ...

関連情報