Marque de hachage d'échappement (#) dans / etc / environment

17

J'ajoute une variable env à /etc/environmentmais parce que la valeur de la variable contient le signe #, la chaîne est rayée.

MYSQL_PWD="something#no"

Maintenant, si je fais envau - dessus des rendements de code MYSQL_PWD=something. Comment puis-je échapper au hachage? J'ai déjà essayé le \caractère.

Umair A.
la source
Êtes-vous sûr de publier exactement la même chose que vous mettez /etc/environment? Parce que je ne pouvais pas reproduire ce comportement sur Debian Wheezy.
Joseph R. du
Désolé, l'exportation n'est pas là. Mis à jour ma question.
Umair A.
Pour l'instant, j'ai changé MySQL pwd :(
Umair A.
J'ai réussi à reproduire ton comportement. Je ne savais pas que je devais me déconnecter puis me reconnecter pour que mon shell puisse lire /etc/environment.
Joseph R.
@JosephR. - J'ai dupliqué cela et j'ai également été surpris. En examinant le rôle de ce fichier, il semble être conforme à son intention.
slm

Réponses:

18

Cela ne semble pas possible avec /etc/environment. Il s'agit d'un emplacement commun pour les variables indépendantes du shell. Compte tenu de cela, il ne semble pas qu'il supporte les chaînes avec des marques de hachage ( #) et il ne semble pas y avoir de moyen de les échapper.

J'ai trouvé cette SF Q&A intitulée: Comment échapper correctement un caractère «#» de premier plan dans Linux etc / environnement? . Aucune de ces méthodes n'a fonctionné:

  • control = "bonjour"
  • test0 = "# bonjour"
  • 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 réponse acceptée à cette question et quel serait également mon conseil:

Eh bien, ce sont des choses délicates que vous voulez faire, ce /etc/environmentn'est pas la syntaxe du shell, elle en ressemble une, mais ce n'est pas le cas, ce qui frustre les gens. L'idée derrière /etc/environmentétait merveilleuse. Une façon indépendante du shell de configurer des variables! Yay! Mais les limites pratiques le rendent inutile.

Vous ne pouvez pas y passer de variables. Essayez par exemple d'y mettre MAIL=$HOME/Maildir/et voyez ce qui se passe. Il vaut mieux arrêter d'essayer de l'utiliser à quelque fin que ce soit, hélas. Vous ne pouvez donc pas faire avec lui des choses que vous vous attendriez à pouvoir faire si elles étaient traitées par un shell.

Utilisez /etc/profileou /etc/bashrc.

Pourtant, un autre Q&R a donné cette raison pour expliquer pourquoi c'est le cas:

Il n'y a aucun moyen /etc/environmentd'échapper au # (car il est traité comme un commentaire) car il est analysé par le module PAM "pam_env" et il le traite comme une simple liste de paires KEY = VAL et configure l'environnement en conséquence. Ce n'est pas bash / shell, l'analyseur n'a pas de langage pour faire l'expansion des variables ou l'échappement des caractères.

Les références

slm
la source
est-ce un bug ou il y a une raison derrière ça?
Umair A.
1
@UmairAshraf - pas un bug, juste des fonctionnalités limitées étant donné le rôle de ce fichier. Ce fichier couvre plusieurs technologies de shell, il doit donc aller avec des fonctionnalités prises en charge dans tous les shells dans
lesquels
comme c'est idiot; cela aurait juste dû utiliser le même format que /proc/environ.
Kaz
1

Probablement trop tard, mais trois contre-obliques avant ont #fonctionné pour moi.

Si le mot de passe est, dites "admin # 123", vous pouvez le définir comme

admin\\\#123
Sai Sivaram
la source
Cela n'a pas fonctionné pour moi dans le /etc/environmentdossier.
Joey V.