Manera de determinar dónde está configurado cierto parámetro global

Manera de determinar dónde está configurado cierto parámetro global

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 TMOUTy 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 envcomando.

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, .envo . 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 $TMOUTlo 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 -print0en lugar del valor predeterminado -printes 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 -0opción a xargssimplemente hace xargsentender la misma convención.

También vale la pena explicar la práctica de pasar rutinariamente /dev/nullcomo primer argumento . grepDado 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 xargsse 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
       #....

información relacionada