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.


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


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

Isso não funcionou para mim no /etc/environmentarquivo.
— Joey V.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.