Maneira de determinar onde determinado parâmetro global está configurado

Maneira de determinar onde determinado parâmetro global está configurado

Possível duplicata:
Como determinar de onde veio uma variável de ambiente

Gostaria de saber se existe uma maneira de determinar a localização do arquivo onde existe determinada configuração. Por exemplo sei que tenho um parâmetro global TMOUTe quero alterá-lo, mas não sei ONDE está configurado. Estou ciente deessepergunta que já foi feita aqui, porém gostaria de saber se existe alguma outra forma disponível além de investigar a ordem de aparecimento das variáveis ​​​​de acordo com o envcomando.

Responder1

Este comando levará muito tempo para ser executado (já que examinará todos os arquivos do sistema), mas deverá encontrar o arquivo:

find / -type f -print0 | xargs -0 grep -w 'TMOUT=' /dev/null

Uma abordagem alternativa é descobrir em que circunstâncias ele está definido, por exemplo, verificando se está definido quando o shell não é um shell de login ( env -i bash) e se é ( env -i bash --login). Você pode fazer check-in manual de arquivos $HOME, por exemplo .profile, .env, .bashrcou .bash_profile. Existem também alguns arquivos nos /etc/quais especificam variáveis ​​de ambiente; pode ser definido em qualquer um deles.

Se o seu shell de login for ksh, você descobrirá que ele $TMOUTé definido pelo próprio shell ksh.


Editar:para explicar alguns dos recursos menos óbvios da linha de comando acima:

O idioma find ... -print0 | xargs -0 ...é bastante comum. O objetivo de usar -print0em vez do padrão -printé que os nomes dos arquivos terminam com um ASCII NUL no caso de -print0. Isso significa que os nomes de arquivos contendo uma nova linha real serão representados corretamente. Passar a -0opção para xargssimplesmente faz xargsentender a mesma convenção.

Também vale a pena explicar a prática de passar rotineiramente /dev/nullcomo primeiro argumento . grepComo você só obtém o fim do arquivo ao ler from /dev/null, ele nunca corresponderá a nenhuma string não vazia com grep. Portanto, não haverá ocorrências para esse arquivo. Nós apenas o especificamos na linha de comando do grep para lidar corretamente com o caso em que a última vez que xargso grep é executado, há apenas um arquivo restante a ser pesquisado. Se grep tiver apenas um argumento de arquivo, ele listará os resultados sem especificar a linha de comando. Igual a:

~/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

Responder2

Embora esta não seja uma resposta exata para sua pergunta, ela pode responder a uma parte dela.

StackOverflow: Linux: onde as variáveis ​​de ambiente são armazenadas?

EDITAR:

Ao depurar meus scripts de shell eu normalmente adiciono -x #!/bin/bash -x Você também pode tentar executá-lo a partir do 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
       #....

informação relacionada