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

1

Eu tenho um script TCL esperar que executa um comando scp para fazer o upload de um arquivo de configuração para o 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
            }
        }
    }
}

Eu gostaria de retornar um código de erro específico se o utilitário scp não puder ser encontrado. Atualmente, o script sai com um status de 1. Se o script sair com um 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 de 5 ou algo assim?

    
por David Kennedy 16.06.2014 / 00:37

1 resposta

3

A melhor maneira de fazer isso é verificar se 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 ...
    
por 16.06.2014 / 01:02