当我使用ZSH时,如何在/etc/profile.d中设置PATH?

Modified on: Thu, 14 Jun 2018 03:50:23 +0800

我正在使用zsh作为我的shell,我正在尝试配置我的环境。

我通常通过创建文件来定义我的$JAVA_HOME变量:

/etc/profile.d/java.sh

具有以下内容

/etc/profile.d/java.sh

然后我退出并重新登录,一切正常,但由于某种原因,未设置PATH变量。它识别JAVA_HOME,但不识别新的PATH,请参阅此终端代码段:

export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH

我通过尝试从jvm

运行命令来确认它

~  echo $JAVA_HOME
/usr/lib/jvm/jdk1.8.0_05
~  echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

PATH不包含$JAVA_HOME。我还应该检查一下吗?

我已检查过,如果我跑:

~  java -version
zsh: command not found: java

一切正常运行,我的变量按原样设置,但/etc/profile.d中的脚本不应自动运行吗?

最佳答案

从我的观点来看,最好的方法是在~/.zshrc文件中添加以下行(如果你还没有它,那么创建它):

if [ -d "/path/to/jdk" ] ; then
    export PATH="/path/to/jdk/bin:$PATH"
fi

然后重新启动zsh,或者只运行source ~/.zshrc,然后你的PATH应该完全符合你的意愿。

或者,如果要将更改设置为系统范围,请将以前的代码添加到/etc/zsh/zshenv文件的末尾。

但在任何情况下都不要使用/etc/profile.dzsh中自动运行脚本。此目录仅对bash shell有用,而不是像你的情况那样zsh。要理解这一点,请打开/etc/profile文件,这是一个bash初始化文件,绝不是zsh初始化文件 ,你会看到文件末尾的某个地方:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

因此,只有在zsh初始化文件中添加以前的代码时,/etc/profile.d目录中的脚本才会自动在zsh中运行,如/etc/zsh/zprofile,或/etc/profile文件中的source /etc/zsh/zprofile


相关问答

添加新评论