Forma de determinar onde determinado parâmetro global está configurado [duplicado]

0

Gostaria de saber se existe uma maneira de determinar a localização do arquivo onde existe determinada configuração. Por exemplo, saiba que tenho um parâmetro global TMOUT e quero alterá-lo, mas não sei ONDE está configurado. Estou ciente de que esta questão que já foi perguntado aqui, no entanto eu gostaria de saber se existe alguma outra maneira disponível, exceto investigar a ordem de aparência das variáveis de acordo com o comando env .

    
por Eugene S 25.03.2012 / 17:44

2 respostas

2

Este comando levará muito tempo para ser executado (já que examinará todos os arquivos no 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 ela está definida, por exemplo, verificando se ela está definida quando o shell não é um shell de login ( env -i bash ) e se é ( env -i bash --login ). Você pode verificar manualmente os arquivos em $HOME , por exemplo .profile , .env , .bashrc ou .bash_profile . Existem também alguns arquivos em /etc/ que especificam variáveis de ambiente; poderia ser definido em qualquer um deles.

Se o seu shell de login for ksh , você verá que $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 ponto de usar -print0 em vez do padrão -print é que os nomes de arquivos são finalizados com um ASCII NUL no caso de -print0 . Isso significa que nomes de arquivos contendo uma nova linha serão representados corretamente. Passar a opção -0 para xargs simplesmente faz com que xargs entenda a mesma convenção.

A prática de passar /dev/null rotineiramente como o primeiro argumento para grep também vale a pena ser explicada. Como você só obtém o final do arquivo ao ler /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 hora final xargs é executada grep, existe apenas um arquivo restante a ser pesquisado. Se o grep tiver apenas um argumento de arquivo, ele listará as ocorrências sem especificar a linha de comando. Assim:

~/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
    
por 25.03.2012 / 21:09
0

Embora esta não seja uma resposta exata para a 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, geralmente adiciono -x #!/bin/bash -x Você também pode tentar executá-lo a partir do shell como bash -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
       #....
    
por 25.03.2012 / 19:10