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