在我们的 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"
只需注意清理所有尾随空格,它们可能最终会出现在值中或导致其他问题。
有关的: