在Yosemite中设置环境变量

时间:2015-02-06 17:21:05

标签: bash environment-variables osx-yosemite

在Yosemite中修改像PATH这样的环境变量的正确方法是什么?

这是Setting environment variables in OS X?这个问题,但特别针对优胜美地,因为它不再适用。

4 个答案:

答案 0 :(得分:3)

您是否尝试过编辑~/.bash_profile

将这样的行添加到bash_profile应该这样做:

  

export PATH = / usr / local / bin:$ PATH

答案 1 :(得分:2)

你使用的是什么外壳?我假设你正在使用默认的Bash shell。还有Csh,Ksh和Zsh。

默认情况下,Mac OS X上的Terminal.app会在每次打开窗口时启动一个新的登录 shell。这意味着当您打开新的终端窗口时,始终会执行$HOME/.bash_profile$HOME/profile。您可以在此处设置特定默认值。例如,我设置了PS1set -o vi

  

注意:如果您正在使用xterm等其他终端应用,则情况可能并非如此。这些打开新的终端窗口就像新的炮弹一样。这意味着在您注销并重新登录之前,您可能看不到.bash_profile中所做的更改。

     

您可以尝试修改$HOME/.bashrc并查看是否有帮助。

     

其他炮弹怎么样?

     

如果您正在使用Kornshell(ksh),则需要修改$HOME/profile而不是$HOME/.bash_profile。如果你正在使用Zshell(zsh),那么你自己就可以了。在这里描述它太古怪了。阅读zsh的联机帮助页并搜索ZDOTDIR

运行shell脚本时,会执行$HOME/.bashrc。大多数人在.bash_profile中添加了这样的内容,因此他们的.bashrc设置包含在新的终端窗口中:

[[ -x $HOME/.bashrc ]] && source "$HOME/.bashrc"

有些人设置了他们在运行shell脚本时要设置的内容,例如export $PS4="\$LINENO> "

$PATH有点不同。您可以在.bash_profile中设置它(我不会在.bashrc中设置它),但是,Mac OS X在系统范围路径设置方面有自动化原因。名为/etc/paths的文件用于通过/usr/libexec/path_helper程序为使用Bash或Kornshell的所有用户设置默认路径。

在我的Mac上,我将$PATH设置为:

/usr/local/bin:/usr/share/bin:/bin:/usr/bin:/usr/sbin:/sbin:$HOME/bin

当我安装程序时,我通常会在/opt下安装它们。然后,我将他们的二进制文件(它们放置在哪里)链接到/usr/local/bin。这样,我就不必继续构建我的PATH了。另外,它允许我覆盖系统默认值。例如,/usr/bin/git为1.9.3。而我安装的/usr/local/bin/git版本为2.2.1。

您不应该做的一件事是修改/etc/profile,因为在OS X升级时可能会替换更改。

答案 2 :(得分:1)

问题不在于设置和从/ bin / bash或/ bin / sh中访问的环境变量,而是应该为未从shell执行的程序设置envars;即从Dock或Finder执行的普通应用程序。

在小牛队最终使用launchctl解决问题后,Apple正在重新改变事态。 launchctl的有用子命令现在标记为"遗留子命令" ,其中一些不再受支持。这给其他人留下了问号。

在任何情况下,最重要的子命令目前仍然可用。

launchctl允许设置用户进程执行的整体环境。整个用户环境似乎都是由所有终端进程继承的;即导出所有setenv变量。确认这一点有点棘手。在任何情况下,您仍然需要.profile和.bashrc来定义launchctl不支持的函数和别名。

我会尽一切努力确保我的所有launchctl变量也在我的个人资料中定义。这使我能够在远程或VM linux系统上设置相同的环境,只需进行一些小的调整。

我的设置中的Al描述为in this blog post

答案 3 :(得分:0)

以下解决方案为我工作。

  1. 打开终端
  2. 点击右上角的终端菜单。
  3. 点击“偏好设置”
  4. 点击常规
  5. 使用to命令更改Shell打开并将/ bin / bash放入文本框中。
  6. enter image description here

    现在在〜/ .bash_profile中执行的任何配置都会生效。以前你没有使用bash(使用ksh)这就是为什么它没有读取.bash_profile。