¿Por qué mi script bash no recibe el código de salida de umount?

4

Esta es la primera vez que intento escribir un script bash largo para administrar un servidor que ejecuto, y cuando uso "set -ex" el script se cierra cuando falla umount. Pensé que mi declaración if lo captaría, pero el script se cierra antes de que se active echo.

¿Qué estoy pasando por alto aquí?

umount $MOUNTPATH
if [[ $? -ne 0 ]];
then
  /bin/echo "Failed to unmount!  Already unmounted?"
fi
Jeff
fuente

Respuestas:

4

set -ehará que el shell salga tan pronto como falle un comando. Es decir, tan pronto como unmounttermine el comando. No ifpuede atraparlo, ya que el script sale antes de que llegue al if. Puede arreglar esto poniendo el unmountcomando en la condición if (negado !para hacer que se ejecute la thencláusula si falla el desmontaje, en lugar de si tiene éxito):

if ! unmount $MOUNTPATH; then
    /bin/echo "Failed to unmount!  Already unmounted?"
fi
Gordon Davisson
fuente
Ah ok, tampoco me di cuenta de esto. Gracias.
Jeff
1

El problema es que tiene un punto y coma después de su declaración if.

umount $MOUNTPATH
if [[ $? -ne 0 ]]
then
  /bin/echo "Failed to unmount!  Already unmounted?"
fi

Eso debería arreglarlo.

Fuentes: http://bash.cyberciti.biz/guide/If_structures_to_execute_code_based_on_a_condition

prateek61
fuente
Tendré que leer más, pensé que el punto y coma era necesario. Ahora veo que eso solo si lo pongo en la misma línea. Gracias.
Jeff
Se agregó un enlace para un tutorial bastante bueno sobre condicionales en bash
prateek61
También voy a señalar que la respuesta de Gordon Davisson es probablemente más correcta que la mía. Lo intentaría ya que parece más ordenado.
prateek61