Uso de set en Bash Shell

Niraj Menon 30 enero 2023
  1. Seguimiento de comandos con set -x en Bash
  2. Otras opciones útiles para set en Bash
Uso de set en Bash Shell

El shell Bash contiene varios comandos incorporados útiles para manipular el entorno de una sesión de shell que se está ejecutando actualmente. El comando integrado set brinda la capacidad de ver y cambiar las variables y opciones del entorno del shell.

Este tutorial analiza la variedad de usos del comando set y cómo escribir scripts de Bash de manera efectiva para configurar buenas opciones de entorno.

Seguimiento de comandos con set -x en Bash

De forma predeterminada, ejecutar solo el comando set devolverá una lista de las variables configuradas actualmente y sus valores, incluida la ubicación del ejecutable de Bash, la información de la versión y las variables de entorno como PATH.

El uso del comando es cuando ve los comandos ejecutados. Si es programador, esto podría ayudarlo a depurar sus scripts de Bash para ver si fallan en un comando específico.

Para hacer esto, ejecute set -x o set -o xtrace, que activa el rastreo de comandos. Si bien el comando en sí no genera nada, los comandos posteriores se imprimirán justo antes de la ejecución. Es útil usar expansiones de llaves, una característica reciente de Bash, en sus comandos.

Si tiene un comando para eliminar archivos TXT numerados, tener habilitado el seguimiento del comando set mostrará la forma expandida de las llaves con todos los archivos TXT en ese directorio.

user@linux:~$ set -x
user@linux:~$ cd /tmp
+ cd /tmp
user@linux:~$ # example of expansion (and comments do not print out in traces)
user@linux:~$ touch {1..5}.txt
+ touch 1.txt 2.txt 3.txt 4.txt 5.txt
user@linux:~$ rm -f *.txt
+ rm -f *.txt
user@linux:~$ # however, asterisk globs do not expand.

Otras opciones útiles para set en Bash

El comando set ofrece muchas otras opciones mutuamente excluyentes para la operación de shell similar al seguimiento de comandos, como no ejecutar el comando, cambiar la línea de comando a un editor de estilo Emacs, imprimir seguimientos cuando ocurre un error, etc.

Ten en cuenta que para activar una opción, debes usar set -o <option_name> y set +o <option_name> para desactivarla.

A continuación se explica una lista completa de estas opciones, con información procedente del manual de GNU para el conjunto integrado.

  1. allexport: si tiene un script Bash que establece variables de entorno y desea que esas variables estén disponibles para el shell actual y cualquier subshell posterior, set -a o set -o allexport hace que esos variables que se van a exportar y pasa a estar disponible para esos contextos de shell.
  2. braceexpand: la expansión de llaves nos permite expandir un conjunto constante de un par de números en una cadena delimitada por espacios del rango de esos números. Desactivar esto deshabilitará la expansión de llaves si desea que un comando inferior en el shell evalúe las llaves.
  3. Emacs: permite la edición basada en emacs en la línea de comandos para quienes estén familiarizados con ella.
  4. errexit: si un comando en un script de Bash sale con un código de estado distinto de cero, todo el script se detendrá. Se puede evitar haciendo OR en el comando fallido con un segundo comando que devuelve un código de salida cero para evitar que el script se cierre prematuramente.
  5. errtrace: se imprime un seguimiento del comando fallido si un programa sale con un código de estado distinto de cero.
  6. hashall: realiza un seguimiento de las ubicaciones de los comandos cuando se buscan en el entorno PATH. Almacena en caché las rutas de comando en una ubicación para una búsqueda y ejecución más rápidas.
  7. histexpand - Expande el “!” carácter en cadenas como una función de sustitución de historial. Si tiene problemas para usar el “!” carácter en cadenas y no hace mucho trabajo de sustitución de historial, puede desactivarlo con seguridad.
  8. History: es una característica crucial que le permite mantener una lista de comandos ejecutados previamente.
  9. ignoreeof: el carácter EOF (proporcionado por Ctrl-D) generalmente sale de un shell Bash o de un comando que acepta la entrada. Al deshabilitar esta opción, se ignorará EOF, lo que podría romper algunos comandos que solo aceptan EOF.
  10. Monitor: activa el control de trabajos, lo que hace que los procesos que se ejecutan en segundo plano impriman su código de salida a medida que completan su ejecución. Es útil verificar los procesos en segundo plano a medida que finalizan.
  11. noclobber: evita que las utilidades de redirección de Bash como >&, <> trunquen los archivos existentes. Es útil si está tratando con archivos de registro reales durante la prueba y no desea eliminar los registros existentes accidentalmente.
  12. noexec - Imprime comandos pero no los ejecuta. Si se usa en un script, noexec puede omitir ciertos comandos y ejecutar otros encendiéndolos y desactivándolos en ciertos puntos.
  13. noglob: evita la expansión de globs (es decir, *.txt).
  14. Notificar: cuando se usa con monitor, notificar imprime los códigos de estado del trabajo en segundo plano inmediatamente, en lugar de esperar al siguiente indicador de shell.
  15. nounset: devuelve un código de error si una variable no está configurada y se intenta leer su valor.
  16. onecmd - Salir después de leer y ejecutar el siguiente comando.

Hay más opciones en el manual anterior, si desea leerlas. Con suerte, estas opciones pueden mejorar su experiencia de programación Bash.

Si desea volver a leer acerca de estas opciones desde la línea de comandos, intente ejecutar el help set. También recomendamos la página del Proyecto de documentación de Linux para obtener más información sobre el comando set.