set -e en Bash Scripting

Nilesh Katuwal 30 enero 2023
  1. Uso de set -e fuera del cuerpo de la función en Bash
  2. Usando set -e dentro del cuerpo de la función en Bash
set -e en Bash Scripting

Si el comando devuelve un estado de salida distinto de cero, la opción set -e le indica al shell que salga. En términos simples, el shell se cierra cuando falla un comando.

En los scripts de gestión de paquetes de Debian, set -e también se conoce como set -o errexit. De acuerdo con la política de Debian, se requiere el uso de esta opción en ciertos scripts; el objetivo parece ser evitar cualquier posibilidad de un escenario de error no controlado.

En realidad, esto significa que debe comprender las situaciones en las que los comandos que ejecuta pueden devolver un error y abordar explícitamente cada uno de esos problemas.

Uso de set -e fuera del cuerpo de la función en Bash

Escribamos un script Bash para imprimir Hello World usando la función hello_world. Usaremos set -e fuera de la función.

set -e solo se usa para escribir o establecer un código de visualización de error.

#!/bin/bash
set -e
function hello_world()
{
echo "Hello World!"
}
hello_world

Producción :

Hello World!

Usando set -e dentro del cuerpo de la función en Bash

Ahora, pondremos set -e dentro de la función en el script anterior.

#!/bin/bash
function hello_world()
{
set -e
echo "Hello World!"
}
hello_world

Producción :

Hello World!

El uso de set-e dentro o fuera de una función no afecta nuestra salida.

set -e con trap

El comando set -e le indica al terminal que lance una excepción cuando detecta un error, lo que hace que el código detenga la ejecución. La palabra clave trampa le permite utilizar una función integrada, ERR, que acepta el número de línea de error y lo pasa a la función de error.

Veamos un ejemplo.

#!/bin/bash
set -e
function error()
{
echo "error at $1"
}
trap 'error $LINENO' ERR

errors

Hicimos una función error y usamos la variable de shell $1 para almacenar el número de línea donde ocurre el error.

Producción :

demo.sh: line 9: errors: command not found
error at 9

demo.sh es el nombre del archivo de script que contiene el script anterior.

Si una línea de un script falla, pero la última línea tiene éxito, el script completo se considera exitoso. Como resultado, es bastante fácil pasar por alto el error.

Ser intolerante a los errores es mucho mejor en los scripts, y set -e te proporciona eso.