Jay*_*mon 10 ubuntu environment-variables
在 Ubuntu 12.04 上,我定义了一个环境变量,/etc/environment
如下所示:
FOO="value_before#value_after"
Run Code Online (Sandbox Code Playgroud)
当我通过 ssh 进入服务器检查值时,我得到了这个:
$ env | grep FOO
FOO=value_before
Run Code Online (Sandbox Code Playgroud)
我猜它正在将#
视为评论并将其剥离,但是,这有效:
$ . /etc/environment
$ export FOO
$ env | grep FOO
FOO=value_before#value_after
Run Code Online (Sandbox Code Playgroud)
我试过这样逃避#
:
FOO="value_before\#value_after"
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我只是得到了这个:
FOO=value_before\
Run Code Online (Sandbox Code Playgroud)
关于如何使散列被视为值的一部分的任何想法?任何帮助都会很棒。
我在/etc/environment
文件中尝试过的值:
FOO='value_before#value_after'
FOO="value_before#value_after"
FOO='"value_before#value_after"'
FOO="value_before\#value_after"
FOO='value_before\#value_after'
Run Code Online (Sandbox Code Playgroud)
以及上述的其他各种组合。当您通常在 shell 中设置它们时,其中的很多都将起作用。但它们似乎在/etc/environment
文件中不起作用。
小智 6
这是由 pam_env 模块读取的。鉴于 pam_env 模块希望它们是“简单”的 KEY=VALUE 对(不需要引号)并且还支持由 # 标识的注释,因此它假定 # 及其后在 VALUE 中的任何内容都是注释。另请注意,它不支持任何转义概念。
这可以在pam_env.c 中_parse_env_file 函数的以下片段中看到。
/* now find the end of value */
mark = key;
while(mark[0] != '\n' && mark[0] != '#' && mark[0] != '\0')
mark++;
if (mark[0] != '\0')
mark[0] = '\0';
Run Code Online (Sandbox Code Playgroud)
上面的代码段遍历 VALUE 部分的每个字符,直到找到\n
,#
或\0
。然后用\0
.覆盖该字符。
这有效地剥离了#
和接下来的一切。注意:这是一个功能而不是一个错误。这是评论功能。
因此,此时您不能拥有/etc/environment
包含 a#
或 a\n
或\0
在值中间的值。从代码看来,密钥也需要是字母数字。
归档时间: |
|
查看次数: |
5142 次 |
最近记录: |