Linux

為什麼我會在 /etc/environment 中定義的環境變數中得到這個額外的引號?

  • August 15, 2021

在我們的 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

(外殼是 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
$ cat /etc/environment  
export NODE_OPTIONS="--max-old-space-size=5120"

所以,/etc/environment有點奇怪。它由 閱讀pam_env.so,並且手冊頁說它應該包含*“單獨行上的簡單 KEY=VAL 對”,但手冊頁的某些版本說“可以指定導出指令以實現 bash 兼容性,但將被忽略。”*

在任何情況下,它都不會被 shell 讀取,並且不支持所有的 shell 語法。手冊頁沒有提到引號,它不支持反斜杠轉義或擴展其他變數,即類似PATH=$PATH:/some/pathFOOPATH=$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"

只需注意清理任何尾隨空格,它們可能會出現在值中或導致其他問題。

有關的:

引用自:https://unix.stackexchange.com/questions/664229