Nic*_*ick 2 linux bash environment-variables node.js
在我们的 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
Run Code Online (Sandbox Code Playgroud)
(外壳是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"
Run Code Online (Sandbox Code Playgroud)
更新:
谢谢@ilkkachu
$ declare -p NODE_OPTIONS
declare -x NODE_OPTIONS="--max-old-space-size=5120\" "
Run Code Online (Sandbox Code Playgroud)
更新 2:额外的双引号也出现在env输出中:
$ env
NODE_OPTIONS=--max-old-space-size=5120"
Run Code Online (Sandbox Code Playgroud)
更新 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
Run Code Online (Sandbox Code Playgroud)
$ cat /etc/environment
export NODE_OPTIONS="--max-old-space-size=5120"
Run Code Online (Sandbox Code Playgroud)
所以,/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
Run Code Online (Sandbox Code Playgroud)
它在井号上被切断,但由于结束引号后的空格,引号无法识别或删除,并且您在值中同时获得空格和引号。
要按照手册中关于“简单键=值对”的说明,您可以使用:
# increase to 5 GB
NODE_OPTIONS=--max-old-space-size=5120
Run Code Online (Sandbox Code Playgroud)
但根据上面的注释export和观察,这可能也有效:
# increase to 5 GB
export NODE_OPTIONS="--max-old-space-size=5120"
Run Code Online (Sandbox Code Playgroud)
只需注意清理任何尾随空格,它们可能会出现在值中或导致其他问题。
有关的: