Escape-Häkchen (#) in / etc / environment

17

Ich füge eine env-Variable hinzu, /etc/environmentaber da der Variablenwert das Zeichen # enthält, ist die Zeichenfolge gestreift.

MYSQL_PWD="something#no"

Nun, wenn ich envoben mache , ergibt sich Code MYSQL_PWD=something. Wie kann ich Hasch entkommen? Ich habe schon \Charakter ausprobiert .

Umair A.
quelle
Sind Sie sicher, dass Sie genau das veröffentlichen, was Sie eingeben /etc/environment? Weil ich dieses Verhalten auf Debian Wheezy nicht duplizieren konnte.
Joseph R.
Sorry export ist nicht da. Meine Frage wurde aktualisiert.
Umair A.
Im Moment habe ich MySQL pwd geändert :(
Umair A.
Ich habe es geschafft, Ihr Verhalten zu duplizieren. Mir war nicht klar, dass ich mich erst ausloggen und dann wieder einloggen musste, um meine Shell lesen zu können /etc/environment.
Joseph R.
@ JosephR. - Ich habe das nachgebildet und war auch überrascht. Wenn man sich die Rolle dieser Datei ansieht, scheint sie mit ihrer Absicht übereinzustimmen.
SLM

Antworten:

18

Dies scheint mit nicht möglich zu sein /etc/environment. Es ist als gemeinsamer Speicherort für Variablen gedacht, die unabhängig von der Shell sind. In Anbetracht dessen sieht es nicht so aus, als würde es Strings mit Hash-Zeichen ( #) unterstützen, und es scheint keinen Weg zu geben, ihnen zu entkommen.

Ich fand diese SF Q & A mit dem Titel: Wie kann man sich einem führenden "#" - Zeichen in Linux etc / environment entziehen? . Keine dieser Methoden hat funktioniert:

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

Die akzeptierte Antwort auf diese Frage und was wäre auch mein Rat:

Nun, es ist knifflig, was Sie tun möchten, /etc/environmentist keine Shell-Syntax, es sieht aus wie eine, aber es ist nicht so, was die Leute frustriert. Die Idee dahinter /etc/environmentwar wunderbar. Eine Shell-unabhängige Möglichkeit, Variablen einzurichten! Yay! Aber die praktischen Einschränkungen machen es unbrauchbar.

Sie können dort keine Variablen übergeben. Probieren Sie es zum Beispiel MAIL=$HOME/Maildir/aus und sehen Sie, was passiert. Am besten einfach aufhören zu versuchen, es für irgendeinen Zweck zu verwenden, leider. Sie können also keine Dinge damit tun, die Sie erwarten würden, wenn sie von einer Shell verarbeitet würden.

Verwenden Sie /etc/profileoder /etc/bashrc.

Noch eine weitere Frage und Antwort gab diese Begründung, warum dies der Fall ist:

Es gibt keine Möglichkeit /etc/environment, sich dem # zu entziehen (da es als Kommentar behandelt wird), da es vom PAM-Modul "pam_env" analysiert wird und es als einfache Liste von KEY = VAL-Paaren behandelt und die Umgebung entsprechend konfiguriert wird. Es ist keine Bash / Shell, der Parser hat keine Sprache, um Variablen zu erweitern oder Zeichen zu maskieren.

Verweise

slm
quelle
Ist das ein Fehler oder gibt es einen Grund dahinter?
Umair A.
1
@UmairAshraf - kein Fehler, nur eingeschränkte Funktionalität angesichts der Rolle dieser Datei. Diese Datei erstreckt sich über mehrere Shell-Technologien und muss daher mit Funktionen ausgestattet sein, die in allen Shells unterstützt werden, in denen sie verwendet wird.
slm
wie idiotisch; Dies sollte nur das gleiche Format wie verwendet haben /proc/environ.
Kaz
1

Wahrscheinlich zu spät, aber drei Backslashes zuvor haben #für mich funktioniert.

Wenn das Passwort "admin # 123" lautet, können Sie es als definieren

admin\\\#123
Sai Sivaram
quelle
Das hat bei mir in der /etc/environmentDatei nicht geklappt.
Joey V.