Environment-Variables

為什麼環境變數持久性會破壞 PATH 變數?

  • September 6, 2018

我嘗試在 RedHat 中使用/etc/environment.

它清除了我的PATH變數;之後沒有任何命令被辨識。

為什麼會發生這種情況,因為只是在 shell 中執行相同的命令就可以正常工作?!

我的內容/etc/environment

ORACLE_HOME=/usr/lib/oracle/12.1/client64
PATH=$ORACLE_HOME/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib

/etc/environment是 的配置文件pam_env,而不是 shell 讀取的文件。語法有些相似,但又不一樣。特別是,您不能引用現有變數:您已將搜尋路徑設置為包含$ORACLE_HOME/binand $PATH,即名稱中帶有美元符號的目錄。

要為所有使用者設置變數,您可以編輯/etc/security/pam_env.conf,它具有不同的、更豐富的語法,但仍不如您在 shell 中所做的豐富。

ORACLE_HOME DEFAULT=/usr/lib/oracle/12.1/client64
PATH OVERRIDE=/usr/local/bin:/usr/bin:/bin:${ORACLE_HOME}/bin
LD_LIBRARY_PATH DEFAULT=$ORACLE_HOME/lib

請注意,您可以引用其他變數,但不能引用變數的先前值。

如果您想要更靈活的方法,請/etc/profile改為添加變數定義。在那裡你可以使用所有的 shell 結構。缺點是這只能在登錄會話中讀取,而不是通過 cron 讀取。. /etc/profile;但是,您可以通過在 cron 作業的開頭添加來輕鬆地從中受益。

export ORACLE_HOME=/usr/lib/oracle/12.1/client64
PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

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