Como alguém pode escapar corretamente de um caractere “#” no linux etc / environment?

5

Eu gostaria de armazenar uma variável de ambiente para todo o sistema em etc/environment no AWS Linux AMI 2013.03. Neste exemplo, estou tentando armazenar a frase "#hello". Veja os exemplos abaixo. echo $control produz

hello

Eu esperava que echo $test0 (abaixo) produzisse:

#hello

mas em vez disso, produz uma linha em branco. A seguir, lista de testes que eu digitei em /etc/environment :

  • control="hello"
  • test0="#hello"
  • test1="h\#ello"
  • test2="h\#ello"
  • test3="h//#ello"
  • test4="h/#ello"
  • test5=h#ello
  • test6=h\#ello
  • test7=h\#ello
  • test8=h//#ello
  • test9=h/#ello
  • test10='h#ello'
  • test11='h\#ello'
  • test12='h\#ello'
  • test13='h//#ello'
  • test14='h/#ello'

Se eu fizer o logout, faça o login novamente na máquina, ele irá analisar corretamente o / etc / environment. A condição de controle passa em echo $control . No entanto, nenhum dos casos de teste responde corretamente. Em cada instância, a cadeia além do hash (#) é ou mastigada ou ignorada. Por exemplo, echo $test5 produz h . Existe uma maneira melhor de escapar corretamente do # ?

Curiosamente, se eu executar source /etc/environment , tudo funcionará como esperado e, de fato, echo $control e echo $test produzirão o resultado pretendido. Mas, no logout / login, o problema retorna ...

    
por kurttheviking 08.05.2013 / 17:26

1 resposta

3

Bem, é algo complicado que você quer fazer. O / etc / environment não é a sintaxe do shell, parece um, mas não é, o que frustra as pessoas. A idéia por trás do / etc / environment foi maravilhosa. Uma maneira independente de shell para configurar variáveis! Yay! Mas as limitações práticas tornam isso inútil.

Você não pode passar variáveis para lá. Por exemplo, tente colocar MAIL = $ HOME / Maildir / e ver o que acontece. Melhor apenas parar de tentar usá-lo para qualquer finalidade, infelizmente. Então você não pode fazer coisas com isso que você esperaria poder fazer se fosse processado por um shell.

Use / etc / profile ou / etc / bashrc.

    
por 08.05.2013 / 17:44