Esci dal segno di hash (#) in / etc / environment


17

Sto aggiungendo una variabile env a /etc/environmentma poiché il valore della variabile contiene # segno, la stringa è a strisce.

MYSQL_PWD="something#no"

Ora, se faccio envsopra i rendimenti del codice MYSQL_PWD=something. Come posso sfuggire all'hash? Ho già provato il \personaggio.


Sei sicuro di pubblicare esattamente la stessa cosa che stai inserendo /etc/environment? Perché non ho potuto duplicare questo comportamento su Debian Wheezy.
Joseph R.,

Spiacenti, l'esportazione non è presente. Aggiornato la mia domanda.
Umair A.,

Per ora ho cambiato MySQL pwd :(
Umair A.

Sono riuscito a duplicare il tuo comportamento. Non mi ero reso conto che avrei dovuto disconnettermi e riconnettermi per leggere la shell /etc/environment.
Joseph R.,

@JosephR. - Ho duplicato questo e sono rimasto sorpreso. Esaminando il ruolo di questo file sembra essere coerente con le sue intenzioni.
slm

Risposte:


18

Questo non sembra essere possibile con /etc/environment. È inteso come posizione comune per variabili indipendenti dalla shell. Detto questo, sembra che non supporti stringhe con segni di hash ( #) e non sembra esserci un modo per sfuggirle.

Ho trovato questo Q&A SF intitolato: Come si fa a sfuggire correttamente a un carattere "#" principale in Linux etc / environment? . Nessuno di questi metodi ha funzionato:

  • controllo = "ciao"
  • test0 = "# ciao"
  • 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'

La risposta accettata a quella domanda e quale sarebbe anche il mio consiglio:

Beh, è ​​roba complicata che vuoi fare /etc/environmentnon è la sintassi della shell, sembra una, ma non lo è, il che rende frustranti le persone. L'idea alla base /etc/environmentera meravigliosa. Un modo indipendente dalla shell per impostare le variabili! Sìì! Ma i limiti pratici lo rendono inutile.

Non puoi passare variabili lì dentro. Prova ad esempio mettici MAIL=$HOME/Maildir/dentro e guarda cosa succede. Meglio smettere di provare a usarlo per qualsiasi scopo, ahimè. Quindi non puoi farci cose che ti aspetteresti di poter fare se fosse stato elaborato da una shell.

Usa /etc/profileo /etc/bashrc.

Ancora un altro Q&A ha dato questo razionale sul perché questo è il caso:

Non c'è modo /etc/environmentdi sfuggire al # (dato che è stato trattato come un commento) mentre viene analizzato dal modulo PAM "pam_env" e lo tratta come un semplice elenco di coppie KEY = VAL e imposta l'ambiente di conseguenza. Non è bash / shell, il parser non ha linguaggio per eseguire espansioni variabili o caratteri di escape.

Riferimenti


è un bug o c'è qualche motivo dietro?
Umair A.,

1
@UmairAshraf - non un bug, solo funzionalità limitate dato il ruolo di questo file. Questo file si estende su più tecnologie di shell, quindi deve essere associato a funzionalità supportate in tutte le shell in cui verrà utilizzato.
slm

che idiota; questo avrebbe dovuto usare lo stesso formato di /proc/environ.
Kaz,

1

Probabilmente troppo tardi, ma tre barre rovesciate prima #funzionavano per me.

Se la password è, dire "admin # 123", è possibile definirla come

admin\\\#123

Questo non ha funzionato per me nel /etc/environmentfile.
Joey V.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.