Siete variables inesperadas de Bash

Continuando con la serie de notas sobre menos conocido funciones bash, te mostraré siete variables que quizás no conozcas.

1) PROMPT_COMMAND

Es posible que ya sepa cómo manipular el mensaje para mostrar información útil, pero no todos saben que puede ejecutar un comando de shell cada vez que se muestra el mensaje.

De hecho, muchos manipuladores de mensajes complejos utilizan esta variable para ejecutar comandos y recopilar información que se muestra en el mensaje.

Intente ejecutar esto en un nuevo shell y vea qué sucede con la sesión:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

Si tu corres history en la consola, recibirá una lista de comandos ejecutados previamente en su cuenta.

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

Una vez que se establece esta variable, las nuevas entradas registran el tiempo junto con el comando, por lo que el resultado se verá así:

1871 Ejecuté esto en: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Ejecuté esto en: 01/05/19 13:38:19 curl bbc.co.uk 1873 Ejecuté esto en : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Ejecuté esto en: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Ejecuté esto en: 01 /05/19 13:39:25 sudo su -

El formato coincide con los caracteres de man date.

3) CDPATH

Para ahorrar tiempo en la línea de comando, puede usar esta variable para cambiar directorios tan fácilmente como emite comandos.

Como PATH, variable CDPATH es una lista de rutas separadas por dos puntos. Cuando ejecutas el comando cd con una ruta relativa (es decir, sin barra diagonal), de forma predeterminada, el shell busca en su carpeta local nombres coincidentes. CDPATH buscará en las rutas que proporcionó el directorio al que desea ir.

Si instala CDPATH de esta manera:

$ CDPATH=/:/lib

y luego ingresa:

$ cd /home
$ cd tmp

Entonces siempre terminarás en /tmp No importa dónde estés.

Sin embargo, tenga cuidado, porque si no especifica el local en la lista (.) carpeta, entonces no podrá crear ninguna otra carpeta tmp y ve a él como de costumbre:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

¡Uy!

Esto es similar a la confusión que sentí cuando me di cuenta de que la carpeta local no estaba incluida en la variable más familiar. PATH... pero tienes que hacerlo en tu variable PATH porque es posible que te engañen para que ejecutes un comando falso a partir de algún código descargado.

El mío lo marca el punto de partida:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

¿Alguna vez te has preguntado, escribiendo exit ¿Lo sacará de su shell bash actual a otro shell "principal" o simplemente cerrará la ventana de la consola por completo?

Esta variable realiza un seguimiento de qué tan profundamente anidado está en el shell bash. Si crea una nueva terminal, se establece en 1:

$ echo $SHLVL
1

Luego, si inicia otro proceso de shell, el número aumenta:

$ bash
$ echo $SHLVL
2

Esto puede ser muy útil en secuencias de comandos en las que no está seguro de salir o no, o realizar un seguimiento de dónde está anidado.

5) LINENO

La variable también es útil para analizar el estado actual y depurar. LINENO, que informa la cantidad de comandos ejecutados en la sesión hasta el momento:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

Esto se utiliza con mayor frecuencia al depurar scripts. Insertando líneas como echo DEBUG:$LINENO, puede determinar rápidamente en qué parte del script se encuentra (o no).

6) REPLY

Si, como yo, sueles escribir código como este:

$ read input
echo do something with $input

Puede resultar sorprendente que no tengas que preocuparte en absoluto por crear la variable:

$ read
echo do something with $REPLY

Esto hace lo mismo.

7) TMOUT

Para evitar permanecer en los servidores de producción demasiado tiempo por razones de seguridad o ejecutar accidentalmente algo peligroso en el terminal equivocado, configurar esta variable actúa como protección.

Si no se ingresa nada durante un número determinado de segundos, el shell se cierra.

Es decir, esta es una alternativa. sleep 1 && exit:

$ TMOUT=1

Fuente: habr.com

Añadir un comentario