【问题标题】:Setting environment variables in Yosemite在 Yosemite 中设置环境变量
【发布时间】:2015-04-06 22:06:01
【问题描述】:

在优胜美地中修改 PATH 等环境变量的正确方法是什么?

这是这个问题Setting environment variables in OS X?,但专门针对优胜美地,因为它不再起作用了。

【问题讨论】:

    标签: bash environment-variables osx-yosemite


    【解决方案1】:

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

    在bash_profile 中添加这样的一行应该可以:

    导出 PATH=/usr/local/bin:$PATH

    【讨论】:

    • 不幸的是,这在优胜美地不起作用。查看链接的帖子了解更多信息。
    • 在我的优胜美地上工作。修改后你运行source ~/.bash_profile了吗?
    • 这取决于你的外壳。 Bash shell 是默认的,但如果你使用 Zsh 或 Ksh,设置 .bash_profile 不会做任何事情。它还取决于您使用的终端应用程序。默认的Terminal.app 使所有新窗口成为登录shell。其他人可能会使每个都只是一个新的外壳,这意味着 .bash_profile 不会被执行。您可能需要退出并重新登录 Mac 才能看到 .bash_profile 中的更改。
    • 他有bash 标签,所以这就是我正在使用的。没有提供有关终端的太多信息,或者实际上他需要终端的变量或其他应用程序访问的变量
    【解决方案2】:

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

    Mac OS X 上的Terminal.app 默认情况下会在每次打开窗口时启动一个新的login shell。这意味着$HOME/.bash_profile 或$HOME/profile 总是在您打开新的终端窗口时执行。您可以在此处设置特定的默认值。比如我设置了PS1和set -o vi。

    注意:如果您使用的是其他终端应用程序,例如xterm,则情况可能并非如此。这些打开新的终端窗口只是新的外壳。这意味着在您注销并重新登录之前,您可能看不到在 .bash_profile 中所做的更改。

    您可以尝试编辑$HOME/.bashrc 看看是否有帮助。

    其他的shell呢?

    如果您使用的是 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 升级时被替换。

    【讨论】:

    • 您能否澄清一下如何确保最新的git 在apple-git 之前运行?
    【解决方案3】:

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

    在 Mavericks 中使用 launchctl 最终解决问题后,Apple 正在再次做出改变。 launchctl 的有用子命令现在标记为“legacy subcommands”,其中一些不再受支持。这给其他人留下了问号。

    无论如何,最重要的子命令现在仍然可用。

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

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

    我的所有设置都被描述为in this blog post。

    【讨论】:

      【解决方案4】:

      以下解决方案对我有用。

      1. 打开终端
      2. 点击右上角的终端菜单。
      3. 点击首选项
      4. 点击常规
      5. 将 Shell 打开方式更改为命令并将 /bin/bash 放入文本框中。

      现在你在 ~/.bash_profile 中所做的任何配置都会生效。以前您没有使用 bash(使用的是 ksh),这就是它没有读取 .bash_profile 的原因。

      【讨论】:

        猜你喜欢
        • 2015-09-09
        • 1970-01-01
        • 2015-11-10
        • 2018-07-13
        • 2011-03-25
        • 2015-02-01
        • 2017-01-01
        • 2017-10-30
        • 2012-03-22
        相关资源
        最近更新 更多