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 TMOUT
e 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 env
comando.
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
, .bashrc
ou .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 -print0
em 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 -0
opção para xargs
simplesmente faz xargs
entender a mesma convenção.
Também vale a pena explicar a prática de passar rotineiramente /dev/null
como primeiro argumento . grep
Como 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 xargs
o 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
#....