为什么环境变量持久性会破坏 PATH var?

Ski*_*kip 4 environment-variables

我尝试在 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
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 7

/etc/environment是 的配置文件pam_env,而不是 shell 读取的文件。语法有些相似,但又不尽相同。特别是,您不能引用现有变量:您已将搜索路径设置为包含$ORACLE_HOME/bin$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
Run Code Online (Sandbox Code Playgroud)

请注意,您可以引用其他变量,但不能引用变量的先前值。

如果您想要更灵活的方法,请/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
Run Code Online (Sandbox Code Playgroud)