Question Comment échapper correctement à un caractère “#” dans linux etc / environment?


Je souhaite stocker une variable d'environnement système dans etc/environment sur AWS Linux AMI 2013.03. Dans cet exemple, j'essaie de stocker la phrase "#hello". Voir les exemples ci-dessous. echo $control produit

hello

j'esperais echo $test0 (ci-dessous) pour produire:

#hello

mais au lieu de cela, il produit une ligne vierge. Voici la liste des tests dans lesquels j'ai tapé /etc/environment:

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

Si je me déconnecte puis me reconnecte, le fichier / etc / environment sera correctement analysé. La condition de contrôle passe echo $control. Cependant, aucun des cas de test ne répond correctement. Dans chaque cas, la chaîne au-delà du hash (#) est décomposée ou ignorée. Par exemple, echo $test5 produit h. Y at-il un meilleur moyen d’échapper correctement à la #?

Fait intéressant, si j'exécute source /etc/environment alors tout fonctionne comme prévu et même les deux echo $control et echo $test produire le résultat souhaité. Mais, lors de la déconnexion / connexion, le problème revient ...


5
2018-05-08 15:26


origine




Réponses:


Eh bien, c’est une chose délicate que vous voulez faire / etc / environment n’est pas une syntaxe de 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. Un moyen indépendant du shell pour configurer les variables! Yay! Mais les limitations pratiques le rendent inutile.

Vous ne pouvez pas passer de variables ici. Essayez par exemple d'y mettre MAIL = $ HOME / Maildir / et voyez ce qui se passe. Mieux vaut cesser d'essayer de l'utiliser à quelque fin que ce soit, hélas. Vous ne pouvez donc pas utiliser ce que vous espériez pouvoir faire s'il était traité par un shell.

Utilisez / etc / profile ou / etc / bashrc.


3
2018-05-08 15:44



Ouais; Avant même de poster ceci, j'ai eu recours à un script bash dans /etc/profile.d - mais comme vous l'avez mentionné, je l'ai trouvé extrêmement frustrant et j'ai pensé qu'il devait y avoir un meilleur moyen - kurttheviking
Bonne chance pour en trouver un, mais je ne pense pas qu'il en existe un. Comme / etc / environment était destiné à une simple déclaration de variables globales, si vous ne voulez pas utiliser une approche spécifique du shell, vous pouvez essayer d'utiliser /etc/security/pam_env.conf, je me souviens que vous pourriez y échapper @ et $, et le chemin l'expansion a fonctionné, pas sûr de # caractère. - Danila Ladner