Escape hash mark (#) em / etc / environment

14

Estou adicionando uma variável env a /etc/environment , mas como o valor da variável contém # sign, string é distribuída.

MYSQL_PWD="something#no"

Agora, se eu fizer env acima, o código gerará MYSQL_PWD=something . Como posso escapar do hash? Eu já tentei o caractere \ .

    
por Neutralizer 26.10.2013 / 23:58

2 respostas

15

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

Eu encontrei este SF Q & A intitulado: Como um apropriadamente escapa de um caractere" # "inicial 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 seria também o meu conselho:

Well it is tricky stuff you want to do /etc/environment is not shell syntax, it looks like one , but it is not, which does frustrates people. The idea behind /etc/environment was wonderful. A shell-independent way to set up variables! Yay! But the practical limitations make it useless.

You can't pass variables in there. Try for example put MAIL=$HOME/Maildir/ into it and see what happens. Best just to stop trying to use it for any purpose whatsoever, alas. So you can't do things with it that you would expect to be able to do if it were processed by a shell.

Use /etc/profile or /etc/bashrc.

Ainda outro Q & Um deu essa razão sobre o motivo:

There is no way in /etc/environment to escape the #(as it treated as a comment) as it is being parsed by he PAM module "pam_env" and it treats it as a simple list of KEY=VAL pairs and sets up the environment accordingly. It is not bash/shell, the parser has no language for doing variable expansion or characters escaping.

Referências

por 27.10.2013 / 00:03
1

Provavelmente é tarde demais, mas três barras invertidas antes de # funcionar para mim.

Se a senha for, diga "admin # 123", você pode defini-lo como

admin\\#123
    
por 30.07.2018 / 14:38