/ etc / environment中的转义哈希标记(#)


17

我向其中添加了一个env变量,/etc/environment但由于变量值包含#号,因此字符串是带状的。

MYSQL_PWD="something#no"

现在,如果我在env上面的代码中执行yields MYSQL_PWD=something。我如何逃脱哈希?我已经尝试过\角色。


您确定要发布的内容完全相同/etc/environment吗?因为我无法在Debian Wheezy上重复此行为。
约瑟夫R.13年

抱歉,出口不存在。更新了我的问题。
Umair A.

目前,我已经更改了MySQL pwd :(
Umair A.13.26.13,22:

我设法重复了您的行为。我没意识到我需要注销然后重新登录以阅读我的shell /etc/environment
Joseph R.

@JosephR。-我重复了这个,也很惊讶。调查此文件的作用似乎与它的意图一致。
slm

Answers:


18

使用似乎无法实现/etc/environment。这是外壳独立变量的通用位置。鉴于此,它似乎不支持其中带有哈希标记(#)的字符串,并且似乎没有一种对它们进行转义的方法。

我发现了这个标题为SF的问答:如何在Linux 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'

该问题的公认答案以及我的建议也是什么:

好吧,您要做的棘手的事情/etc/environment不是shell语法,它看起来像是shell语法,但事实并非如此,这确实使人们感到沮丧。背后的想法/etc/environment很棒。一种与外壳程序无关的方式来设置变量!好极了!但是实际的局限性使其无法使用。

您不能在其中传递变量。尝试例如放入MAIL=$HOME/Maildir/其中,看看会发生什么。最好只是停止尝试将其用于任何目的,a。因此,如果它是由Shell处理的,则您将无法做它期望做的事情。

使用/etc/profile/etc/bashrc

然而,又有一个问答集给出了这种情况的合理解释:

有没有办法/etc/environment逃脱#(因为它视为注释),因为它是由他PAM模块“pam_env”解析,并把它当作KEY = VAL对,并建立相应的环境的简单列表。它不是bash / shell,解析器没有进行变量扩展或字符转义的语言。

参考文献


是一个错误还是背后有任何原因?
Umair A.

1
@UmairAshraf-不是错误,考虑到此文件的作用,功能有限。在多个外壳技术,此文件的跨度,因此必须去与在会中使用的所有外壳支持的功能。
SLM

多么愚蠢 这应该使用与相同的格式/proc/environ
卡兹(Kaz)

1

可能为时已晚,但在我之前需要执行三个反斜杠#

如果密码是“ admin#123”,则可以将其定义为

admin\\\#123

/etc/environment文件中,这对我不起作用。
Joey V.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.