Por que essa variável não tem valor, mesmo que esteja definida em .bashrc?

3

Se eu acrescentar isto:

hi=11
export hi

para o .bashrc e suponho para este usuário com:

su - bela

então eu:

echo $hi
11

Então está funcionando, a variável "hi" tem o valor "11". Mas. Quando eu:

su -c "echo $hi" bela

a variável "hi" não tem valor. Por quê?

(rodando no CentOS 6)

    
por LanceBaynes 16.11.2011 / 23:44

1 resposta

9

su -c "echo $hi" bela expande para as palavras su , -c , echo ​ e bela . Como a variável hi não está definida no seu shell atual, sua expansão está vazia. O comando que é executado como usuário bela é echo ​ .

Correção: su -c 'echo $hi' bela , com as aspas simples protegendo o $ da expansão ... Não. O arquivo .bashrc é lido apenas por shells interativos. Quando você executa su -c 'echo $hi' bela , isso executa echo $hi como usuário bela . Mas como nada está definindo a variável hi , o comando echo $hi se expande para echo , o que ainda não imprime nada.

    
por 16.11.2011 / 23:59