Siete variables inesperadas de Bash

Continuando con una serie de notas sobre funciones bash menos conocidas , le mostraré siete variables que quizás no conozca.

1) PROMPT_COMMAND


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

De hecho, muchos manipuladores de solicitudes complejas utilizan esta variable para ejecutar comandos para recopilar la información que se muestra en la solicitud.

Intente ejecutar esto en un nuevo shell y verá lo que sucede con la sesión:

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

2) HISTTIMEFORMAT


Si ejecuta el history en la consola, obtendrá una lista de comandos ejecutados previamente en su cuenta.

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

Tan pronto como se establece esta variable, los nuevos registros registran el tiempo junto con el comando, por lo que la salida se verá así:

 1871 I ran this at: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 I ran this at: 01/05/19 13:38:19 curl bbc.co.uk 1873 I ran this at: 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 I ran this at: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 I ran this at: 01/05/19 13:39:25 sudo su - 

El formato coincide con los caracteres de la fecha del hombre.

3) CDPATH


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

Al igual que PATH , la variable CDPATH es una lista de rutas separadas por dos puntos. Cuando ejecuta el cd con una ruta relativa (es decir, sin una barra al principio), de forma predeterminada, el shell busca los nombres correspondientes en su carpeta local. CDPATH buscará en las rutas que proporcionó el directorio al que desea ir.

Si instala CDPATH esta manera:

 $ CDPATH=/:/lib 

y luego ingrese:

 $ cd /home $ cd tmp 

entonces siempre estará en /tmp sin importar dónde se encuentre.

Sin embargo, tenga cuidado, porque si no especifica una carpeta local ( . ) En la lista, no puede crear ninguna otra carpeta tmp e ir a ella, 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 PATH más familiar ... pero debe hacerlo en la variable PATH porque puede ser engañado ejecutando un comando falso de algún código descargado.

Mi se establece por el punto de partida:

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

4) SHLVL


¿Alguna vez se ha preguntado si ingresar a la exit sacará del shell bash actual a otro shell "padre" o simplemente cerrará completamente la ventana de la consola?

Esta variable realiza un seguimiento de cuán profundamente está incrustado en el shell bash. Si crea una nueva terminal, entonces 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 de rastrear dónde está anidando.

5) LINENO


Además, para analizar el estado actual y la depuración, la variable LINENO es LINENO , que informa el número de comandos ejecutados en la sesión hasta la fecha:

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

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

6) REPLY


Si, como yo, generalmente escribes código como este:

 $ read input echo do something with $input 

puede sorprender que no tenga que preocuparse por crear una variable en absoluto:

 $ read echo do something with $REPLY 

Hace lo mismo

7) TMOUT


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

Si no se ingresa nada dentro del número de segundos establecido, el shell sale.

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

 $ TMOUT=1 

Source: https://habr.com/ru/post/451492/


All Articles