tutorial script lenguaje español ejemplos comandos bash shell scripting

lenguaje - ¿Cómo evitar que un script de bash falle cuando la opción-e está configurada?



shell script linux (3)

Otra opción es usar la trap para capturar la señal de EXIT :

trap ''echo "ls failed" ; some_rescue_action'' EXIT ls /non_exist

Tengo un script bash con el conjunto de opciones -e , que falla todo el script en el primer error.

En el script, estoy tratando de hacer un ls en un directorio. Pero ese camino puede o no existir. Si la ruta no existe, el comando ls falla, ya que el indicador -e está establecido.

¿Hay alguna manera de evitar que el script falle?

Como nota al margen, he intentado el truco para hacer un set +e y set -e antes y después de ese comando y funciona. Pero estoy buscando alguna solución mejor.


Puedes "atrapar" el error usando || y un comando garantizado para salir con 0 estados:

ls $PATH || echo "$PATH does not exist"

Dado que el comando compuesto tiene éxito ya sea que exista o no $PATH , set -e no se activa y su script no se cerrará.

Para suprimir el error de forma silenciosa, puede usar el comando true :

ls $PATH || true

Para ejecutar varios comandos, puede usar uno de los comandos compuestos:

ls $PATH || { command1; command2; }

o

ls $PATH || ( command1; command2 )

Solo asegúrate de que nada falla dentro de cualquiera de los comandos compuestos, tampoco. Una de las ventajas del segundo ejemplo es que puede desactivar el modo de salida inmediata dentro de la subshell sin afectar su estado en la shell actual:

ls $PATH || ( set +e; do-something-that-might-fail )


Una solución sería probar la existencia de la carpeta.

function myLs() { LIST="" folder=$1 [ "x$folder" = "x" ] && folder="." [ -d $folder ] && LIST=`ls $folder` echo $LIST }

De esta manera, bash no fallará si la $folder no existe.