为什么我在 /etc/environment 中定义的环境变量中得到这个额外的引号?

为什么我在 /etc/environment 中定义的环境变量中得到这个额外的引号?

在我们的 CentOS 服务器中,env 变量NODE_OPTIONS设置为错误的值。我检查了一些可能的文件,例如 /etc/environment、/etc/profile,但没有运气。我也尝试从 /etc/ 中 grep 它,但仍然没有成功。这让我心烦意乱。

我什至尝试过这个: https://unix.stackexchange.com/a/154971/92712

惊讶地发现输出中没有这样的变量。但它是在

printenv NODE_OPTIONS 
set | grep NODE_OPTIONS
echo $NODE_OPTIONS

(shell是bash)

有什么方法可以获取此 NODE_OPTIONS 来自哪个文件?


更多信息:

$ node -v
node: invalid value for NODE_OPTIONS (unterminated string)

$ echo $NODE_OPTIONS
--max-old-space-size=5120"

$ cat /etc/environment  
export NODE_OPTIONS="--max-old-space-size=5120"

更新:

谢谢@ilkkachu

$ declare -p NODE_OPTIONS
declare -x NODE_OPTIONS="--max-old-space-size=5120\" "

更新 2:额外的双引号env也出现在输出中:

$ env
NODE_OPTIONS=--max-old-space-size=5120"

更新 3:谢谢@Johan Myréen

$ od -c /etc/environment
0000000  \n   e   x   p   o   r   t       N   O   D   E   _   O   P   T
0000020   I   O   N   S   =   "   -   -   m   a   x   -   o   l   d   -
0000040   s   p   a   c   e   -   s   i   z   e   =   5   1   2   0   "
0000060       #   i   n   c   r   e   a   s   e       t   o       5   g
0000100   b  \n  \n
0000103

答案1

$ cat /etc/environment  
export NODE_OPTIONS="--max-old-space-size=5120"

所以,/etc/environment这有点奇怪。它由pam_env.so, 和手册页因为这表明它应该包含“简单的 KEY=VAL 对位于单独的行上”而且某些版本的手册页也提到了这一点“可以指定导出指令以实现 bash 兼容性,但会被忽略。”

无论如何,它都不会被 shell 读取,并且不支持所有 shell 语法。手册页没有提到任何有关引号的内容,并且它不支持反斜杠转义或扩展其他变量,即诸如PATH=$PATH:/some/path或 之类的东西FOOPATH=$HOME/foo不起作用。

但是,这还不是全部,因为它似乎确实将#符号视为注释标记,即使在一行中间,至少在我的 Debian 上,它确实从值的开头和结尾删除引号(如果存在),但不关心它们是否匹配

例如,通过左侧的两行,我得到右侧的两个值:

/etc/environment 结果变量
TEST1="hash#sign" TEST1=hash
TEST2="mixed quotes' TEST2=mixed quotes

根据您的od输出,您/etc/environment实际上包含这一行:

export NODE_OPTIONS="--max-old-space-size=5120" #increase to 5gb

它在哈希符号上被剪切,但由于结束引号后有空格,因此无法识别或删除引号,并且您会在值中同时获得空格和引号。

要遵循手册中有关“简单键=值对”的内容,您可以使用:

# increase to 5 GB
NODE_OPTIONS=--max-old-space-size=5120

但根据上面的注释export和观察,这可能也有效:

# increase to 5 GB
export NODE_OPTIONS="--max-old-space-size=5120"

只需注意清理所有尾随空格,它们可能最终会出现在值中或导致其他问题。

有关的:

相关内容