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