¿Cómo puedo devolver un código de error específico en este punto de mi script TCL?

¿Cómo puedo devolver un código de error específico en este punto de mi script TCL?

Tengo un script TCL expect que ejecuta un comando scp para cargar un archivo de configuración en mi 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
            }
        }
    }
}

Me gustaría devolver un código de error específico si no se puede encontrar la utilidad scp. Actualmente, el script sale con un estado de 1. Si el script sale con un estado de 7, puedo manejarlo porque sé que es un error de acceso denegado. El error que aparece en el registro de Apache es:

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

¿Cómo puedo devolver un código de error de 5 o algo así en este momento?

Respuesta1

La mejor manera de hacerlo sería verificar si existe y es ejecutable:

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

información relacionada