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


22

我正在zsh用作外壳程序,并且正在尝试配置我的环境。

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

/etc/profile.d/java.sh

具有以下内容

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

然后我注销并重新登录,一切正常,但是由于某种原因PATH未设置变量。它可以识别JAVA_HOME,但不能识别新的PATH终端,请参见以下终端片段:

~  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

我通过尝试从jvm运行命令来确认

~  java -version
zsh: command not found: java

PATH不包括$JAVA_HOME因为它应该。还有什么我应该检查的吗?

我检查了是否可以跑步:

source /etc/profile.d/java.sh

都可以正确运行,并且可以按照我的变量进行设置,但是脚本不应该/etc/profile.d自动运行吗?


您是否尝试过在其中编辑~/.profile和放置变量?可能是该PATH位置在的其他位置被覆盖了/etc/profile.d/
saiarcot895 2014年

Answers:


27

从我的角度来看,最好的方法是在~/.zshrc文件中添加以下几行(如果尚未创建,请创建它):

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

然后重新启动您的zsh,或者只是运行source ~/.zshrc,然后您的PATH应该完全符合您的期望。

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

但是无论如何不要使用/etc/profile.d在中自动运行脚本zsh。该目录仅对bashshell 有用,而不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

所以,从你的脚本/etc/profile.d目录会自动运行zsh只有当您在zsh的初始化文件添加前面的代码,像/etc/zsh/zprofile例如,或源/etc/profile/etc/zsh/zprofile文件。


4
也许~/.zprofile比更好~/.zshrc
muru

3

我发现将所有内容.zshenv快速放入一个文件变得很难管理。我建议安装oh-my-sh,然后将各种自定义项(环境变量,函数).oh-my-sh/custom/作为单独的.zsh文件放置到目录中。

我还发现,在修改环境变量(例如)时,将其插入计算机时,该方法可以完美地工作PATH。此外,它与vcsh配合使用时效果非常好,可以使自定义项备份和同步。


使用我的zsh框架,您将在哪里将一个带有ip地址(远程服务器)的变量用于ssh访问?我需要git的IP和服务器的登录脚本。
Timo

1
嗯 不太清楚你的意思。我会将ssh的IP地址和用户名等配置放入~/.ssh/config
dvim

我个人更喜欢这种方法来接受答案,因为我喜欢使用vcsh的优势,而ZSH的“ custom”文件夹是处理此类问题的理想场所。
埃里克·布朗

1

由于JAVA_HOME设置,您已确认这些脚本会自动运行,不是吗?

唯一的逻辑解释是PATH稍后以某种方式设置。据原始,它应该由PAM设置,它读取/etc/environment为,据我所知,这是在获取/etc/profile.d/*.sh文件之前发生的。在这方面,与bash相比,zsh的工作方式可能有所不同。


0

运行更新后,仅在本地遇到此问题。看起来根本的问题是Drush不知道在哪里可以找到包含pdo的php的合法副本。幸运的是,它支持将此路径存储在环境变量中,因此我在命令行上执行了此操作:

export DRUSH_PHP="/Applications/MAMP/bin/php/php5.4.39/bin/php"

那解决了问题,所以我编辑了.zshrc并将其添加到文件中,问题已解决。


1
所以,你暗示.zshrc使用,同样为最多的回答
muru 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.