Marca de hash de escape (#) em / etc / environment

17

Estou adicionando uma variável env para, /etc/environmentmas como o valor da variável contém # sinal, a string é listrada.

MYSQL_PWD="something#no"

Agora, se eu fizer envacima, o código renderá MYSQL_PWD=something. Como posso escapar do hash? Eu já tentei \personagem.

Umair A.
fonte
Tem certeza de que está postando exatamente a mesma coisa que está inserindo /etc/environment? Porque não consegui duplicar esse comportamento no Debian Wheezy.
Joseph R.
Desculpe, a exportação não está lá. Atualizei minha pergunta.
precisa
Por enquanto eu mudei o MySQL pwd :(
Umair A.
Consegui duplicar seu comportamento. Eu não sabia que precisava sair e voltar para ler meu shell /etc/environment.
Joseph R.
@JosephR. - Eu dupliquei isso e fiquei surpreso também. Examinando o papel desse arquivo, ele parece ser consistente com sua intenção.
slm

Respostas:

18

Isso não parece ser possível com /etc/environment. É um local comum para variáveis ​​independentes de shell. Dado isso, parece que não suporta strings com hash marks ( #) e não parece haver uma maneira de escapar deles.

Eu encontrei esta seção de perguntas e respostas sobre o SF intitulada: Como alguém escapa adequadamente de um caractere "#" principal no linux etc / environment? . Nenhum desses métodos funcionou:

  • control = "olá"
  • test0 = "# olá"
  • 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'

A resposta aceita para essa pergunta e qual também seria meu conselho:

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

Você não pode passar variáveis ​​para lá. Tente, por exemplo, colocá MAIL=$HOME/Maildir/-lo e ver o que acontece. É melhor parar de tentar usá-lo para qualquer fim, infelizmente. Portanto, você não pode fazer coisas que esperaria poder fazer se fossem processadas por um shell.

Use /etc/profileou /etc/bashrc.

Ainda outra sessão de perguntas e respostas deu essa justificativa para o porquê:

Não há como /etc/environmentescapar do # (como tratado como um comentário), pois ele está sendo analisado pelo módulo PAM "pam_env" e o trata como uma lista simples de pares KEY = VAL e configura o ambiente de acordo. Não é bash / shell, o analisador não possui linguagem para executar expansão variável ou caracteres que escapam.

Referências

slm
fonte
Isso é um bug ou há alguma razão por trás disso?
Umair A.
1
@UmairAshraf - não é um bug, apenas funcionalidade limitada, dada a função deste arquivo. Este arquivo se estende por múltiplas tecnologias shell assim que tem que ir com recursos que são suportados em todas as conchas que serão usados no.
SLM
que idiota; isso deveria ter usado o mesmo formato que /proc/environ.
Kaz
1

Provavelmente tarde demais, mas três barras invertidas antes #funcionaram para mim.

Se a senha for, diga "admin # 123", você poderá defini-la como

admin\\\#123
Sai Sivaram
fonte
Isso não funcionou para mim no /etc/environmentarquivo.
Joey V.