Posible duplicado:
Cómo determinar de dónde vino una variable de entorno
Me pregunto si hay alguna manera de determinar la ubicación del archivo donde existe cierta configuración. Por ejemplo, sé que tengo un parámetro global TMOUT
y quiero cambiarlo, pero no sé DÓNDE está configurado. Soy consciente deestePregunta que ya se hizo aquí, sin embargo, me gustaría saber si hay alguna otra forma disponible excepto investigar el orden de aparición de las variables según el env
comando.
Respuesta1
Este comando tardará mucho en ejecutarse (ya que examinará todos los archivos del sistema), pero debería encontrar el archivo:
find / -type f -print0 | xargs -0 grep -w 'TMOUT=' /dev/null
Un enfoque alternativo es averiguar bajo qué circunstancias se establece, por ejemplo comprobando si se establece cuando el shell no es un shell de inicio de sesión ( env -i bash
) y si lo es ( env -i bash --login
). Puede registrar archivos manualmente $HOME
, por ejemplo .profile
, .env
o . También hay algunos archivos en los que se especifican variables de entorno; se podría configurar en cualquiera de ellos..bashrc
.bash_profile
/etc/
Si su shell de inicio de sesión es ksh
, encontrará que $TMOUT
lo establece el propio shell ksh.
Editar:para explicar algunas de las características menos obvias de la línea de comando anterior:
El modismo find ... -print0 | xargs -0 ...
es bastante común. El objetivo de utilizar -print0
en lugar del valor predeterminado -print
es que los nombres de los archivos terminan con un ASCII NUL en el caso de -print0
. Esto significa que los nombres de archivos que contengan una nueva línea real se representarán correctamente. Pasar la -0
opción a xargs
simplemente hace xargs
entender la misma convención.
También vale la pena explicar la práctica de pasar rutinariamente /dev/null
como primer argumento . grep
Dado que solo obtiene el final del archivo cuando lee desde /dev/null
, nunca coincidirá con ninguna cadena que no esté vacía con grep
. Por lo tanto, no habrá coincidencias para ese archivo. Solo lo especificamos en la línea de comando grep para hacer frente correctamente al caso en el que la última vez que xargs
se ejecuta grep y solo queda un archivo por buscar. Si grep tiene solo un argumento de archivo, enumera los resultados sin especificar la línea de comando. Al igual que:
~/tmp/t$ echo hello > a
~/tmp/t$ echo hi > b
~/tmp/t$ grep '^h.*' a
hello
~/tmp/t$ grep '^h.*' a b
a:hello
b:hi
Respuesta2
Si bien esta no es una respuesta exacta a su pregunta, puede responder una parte de ella.
StackOverflow: Linux: ¿dónde se almacenan las variables de entorno?
EDITAR:
Al depurar mis scripts de shell normalmente agrego -x. #!/bin/bash -x
También puedes intentar ejecutarlo desde el shell comobash -x
# su - test
test$ bash -x
unset a r
+ . /etc/bash_completion.d/yast2-completion.sh
**(file sourced)**
++ YAST=/sbin/yast
++ YAST_MODLIST=()
**(variables set from file)**
#....
++ /usr/bin/dircolors -b /etc/DIR_COLORS
+ eval 'LS_COLORS='\''no=00
#....