Como posso retornar um código de erro específico neste ponto do meu script TCL?

Como posso retornar um código de erro específico neste ponto do meu script TCL?

Eu tenho um script TCL expect que executa um comando scp para enviar um arquivo de configuração para meu servidor 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
            }
        }
    }
}

Gostaria de retornar um código de erro específico se o utilitário scp não for encontrado. Atualmente, o script sai com status 1. Se o script sair com status 7, posso lidar com isso porque sei que é um erro de acesso negado. O erro que aparece no log do Apache é:

couldn't execute "/usr/bin/scp": no such file or directory
    while executing
"spawn /usr/bin/scp "$config" [email protected]:/etc/dnsmasq.conf"

Como posso retornar um código de erro 5 ou algo assim neste momento?

Responder1

A melhor maneira de fazer isso seria verificar se ele existe e é executável:

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 ...

informação relacionada