Estoy intentando ejecutar un script de shell en un servidor remoto con mi script de shell local.
Y tengo que detener mi script de shell local cuando se produjo un error en el script de shell remoto.
Estoy ejecutando el script de shell remoto a través de ssh de esta manera.
##parent shell script##
#!/bin/bash -ex
scp remote_shell.sh ${host}:${path}
ssh ${host} '${path}/remote_shell.sh ; rm ${path}/remote_shell.sh'
..do something
##remote_shell.sh##
#!/bin/bash -ex
..do something
..error occurred
exit 1
El problema es que cuando remote_shell.sh sale con 1, pero el shell principal no se detiene.
Probé este script en local (sin ssh) y el padre se detiene como esperaba.
¿Este problema está relacionado con la tercera línea ';' ¿operador?
(Tengo que eliminar el archivo remoto_shell.sh independientemente del error).
Por supuesto que puedo lograr esto con algún código If Else, pero quiero hacerlo simple.
Respuesta1
Usar
ssh ${host} '${path}/remote_shell.sh'
O
ssh ${host} '${path}/remote_shell.sh ; R=$?; rm ${path}/remote_shell.sh; exit $R'
O alguna otra forma de conservar el código de salida.