Veja as variáveis de ambiente de uma corrida processo no Unix? ; ele observa que / proc / * / environ está limitado a 4096 bytes em alguns kernels, e que ele não exibe env vars que foram alterados naquele shell.
o google não está dando amor a este hoje, então eu me volto para os especialistas ...
Atualmente, estou hackeando um script que se baseia no recurso / proc / pid / environ no Linux (RHEL 4) para verificar uma determinada variável de ambiente. O problema é que parece que certas variáveis de ambiente não estão aparecendo por algum motivo.
Exemplo:
create some test vars:
$ export T_1=testval TEST_1=testval T=testval TESTING_LONGEST=testval
open a subshell:
$bash
$ cat /proc/self/environ|tr "create some test vars:
$ export T_1=testval TEST_1=testval T=testval TESTING_LONGEST=testval
open a subshell:
$bash
$ cat /proc/self/environ|tr "%pre%" "\n"|grep testval
TESTVARIABLE_LONGEST=testval
T=testval
" "\n"|grep testval
TESTVARIABLE_LONGEST=testval
T=testval
hmm ... onde foram T_1 e TEST_1? que regras governam esse estranho universo?
Obrigado antecipadamente, Josh
ATUALIZAÇÃO:
Eu consegui reproduzir esse problema em várias versões do RHEL e com vários usuários, mas parece que ele é exclusivo do Bash (estou usando o 3.0). O ksh não mostra esse comportamento.
Veja as variáveis de ambiente de uma corrida processo no Unix? ; ele observa que / proc / * / environ está limitado a 4096 bytes em alguns kernels, e que ele não exibe env vars que foram alterados naquele shell.
Tente usar strings
em vez de tr
. É muito melhor encontrar strings legíveis do que apenas substituir NULs por newlines.
strings /proc/$$/environ
Alguns arquivos em / proc não respondem bem a serem lidos em pequenos blocos. Tente algo assim:
dd if=/proc/self/environ bs=1024k | tr "dd if=/proc/self/environ bs=1024k | tr "%pre%" "\n" | grep testval
" "\n" | grep testval