¿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

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

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.