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

17

Estoy agregando una variable env /etc/environmentpero debido a que el valor de la variable contiene el signo #, la cadena se divide.

MYSQL_PWD="something#no"

Ahora, si hago los envrendimientos del código anterior MYSQL_PWD=something. ¿Cómo puedo escapar del hash? Ya he intentado con el \personaje.

Umair A.
fuente
¿Estás seguro de que estás publicando exactamente lo mismo que estás poniendo /etc/environment? Porque no pude duplicar este comportamiento en Debian Wheezy.
Joseph R.
Lo sentimos, la exportación no está allí. Actualicé mi pregunta.
Umair A.
Por ahora he cambiado MySQL pwd :(
Umair A.
Me las arreglé para duplicar tu comportamiento. No me di cuenta de que necesitaba cerrar sesión y luego volver a ingresar para que mi shell leyera /etc/environment.
Joseph R.
@JosephR. - Dupliqué esto y también me sorprendió. Al analizar el papel de este archivo, parece ser coherente con su intención.
slm

Respuestas:

18

Esto no parece ser posible con /etc/environment. Se entiende como una ubicación común para variables que son independientes de la shell. Dado esto, no parece que admita cadenas con marcas hash ( #) y no parece haber una forma de escapar de ellas.

Encontré este SF Q&A titulado: ¿Cómo se puede escapar correctamente de un carácter principal "#" en Linux, etc / environment? . Ninguno de estos métodos funcionó:

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

La respuesta aceptada a esa pregunta y cuál sería también mi consejo:

Bueno, es algo complicado que quieres hacer /etc/environmentno es la sintaxis de shell, parece una, pero no lo es, lo que frustra a la gente. La idea detrás /etc/environmentfue maravillosa. ¡Una forma independiente de shell para configurar variables! ¡Hurra! Pero las limitaciones prácticas lo hacen inútil.

No puedes pasar variables allí. Intenta, por ejemplo, ponerlo MAIL=$HOME/Maildir/y ver qué pasa. Lo mejor es dejar de intentar usarlo para cualquier propósito, por desgracia. Por lo tanto, no puede hacer cosas que esperaría poder hacer si fuera procesado por un shell.

Use /etc/profileo /etc/bashrc.

Sin embargo, otra Q&A dio esta racional de por qué este es el caso:

No hay forma /etc/environmentde escapar del # (ya que se trata como un comentario) ya que está siendo analizado por el módulo PAM "pam_env" y lo trata como una simple lista de pares KEY = VAL y configura el entorno en consecuencia. No es bash / shell, el analizador no tiene lenguaje para hacer expansión variable o caracteres de escape.

Referencias

slm
fuente
¿Es eso un error o hay alguna razón detrás de esto?
Umair A.
1
@UmairAshraf: no es un error, solo una funcionalidad limitada dada la función de este archivo. Este archivo abarca varias tecnologías de shell, por lo que tiene que ir con características compatibles con todos los shells en los que se utilizará.
slm
que idiota esto debería haber usado el mismo formato que /proc/environ.
Kaz
1

Probablemente demasiado tarde, pero tres barras invertidas antes #funcionaron para mí.

Si la contraseña es, diga "admin # 123", puede definirla como

admin\\\#123
Sai Sivaram
fuente
Esto no funcionó para mí en el /etc/environmentarchivo.
Joey V.