Как мне вернуть определенный код ошибки на данном этапе моего скрипта TCL?

Как мне вернуть определенный код ошибки на данном этапе моего скрипта TCL?

У меня есть скрипт TCL expect, который запускает команду scp для загрузки файла конфигурации на мой DNS-сервер:

#!/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 ...

Связанный контент