890

在 OS X 中修改 PATH 等环境变量的正确方法是什么?

我在谷歌上看了一点,发现三个不同的文件要编辑:

  • /etc/路径
  • ~/.profile
  • ~/.tcshrc

我什至没有这些文件,而且我很确定.tcshrc是错误的,因为 OS X 现在使用 bash。这些变量,尤其是 PATH,在哪里定义?

我正在运行OS X v10.5 (Leopard)。

4

32 回答 32

670

布鲁诺是正确的。我已经进行了广泛的研究,如果您想设置所有 GUI 应用程序中都可用的变量,您唯一的选择是/etc/launchd.conf.

请注意environment.plist 不适用于通过 Spotlight 启动的应用程序。这由 Steve Sexton 记录在这里

  1. 打开终端提示符

  2. 类型sudo vi /etc/launchd.conf(注意:此文件可能尚不存在)

  3. 将如下内容放入文件中

    # Set environment variables here so they are available globally to all apps
    # (and Terminal), including those launched via Spotlight.
    #
    # After editing this file run the following command from the terminal to update
    # environment variables globally without needing to reboot.
    # NOTE: You will still need to restart the relevant application (including
    # Terminal) to pick up the changes!
    # grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl
    #
    # See http://www.digitaledgesw.com/node/31
    # and http://stackoverflow.com/questions/135688/setting-environment-variables-in-os-x/
    #
    # Note that you must hardcode the paths below, don't use environment variables.
    # You also need to surround multiple values in quotes, see MAVEN_OPTS example below.
    #
    setenv JAVA_VERSION 1.6
    setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
    setenv GROOVY_HOME /Applications/Dev/groovy
    setenv GRAILS_HOME /Applications/Dev/grails
    setenv NEXUS_HOME /Applications/Dev/nexus/nexus-webapp
    setenv JRUBY_HOME /Applications/Dev/jruby
    
    setenv ANT_HOME /Applications/Dev/apache-ant
    setenv ANT_OPTS -Xmx512M
    
    setenv MAVEN_OPTS "-Xmx1024M -XX:MaxPermSize=512m"
    setenv M2_HOME /Applications/Dev/apache-maven
    
    setenv JMETER_HOME /Applications/Dev/jakarta-jmeter
    
  4. 在 vi 中保存您的更改并重新启动您的 Mac。或者使用上面代码注释中显示的grep/命令。xargs

  5. 通过打开终端窗口并键入来证明您的变量正在工作,export您应该会看到新变量。这些也将在 IntelliJ IDEA 和您通过 Spotlight 启动的其他 GUI 应用程序中可用。

于 2009-02-25T23:42:27.430 回答
286

不要指望 ~/.launchd.conf 工作

launchctl 的手册页说它从来没有工作过:

已弃用和删除的功能

launchctl 不再具有交互模式,也不接受来自标准输入的命令。/etc/launchd.conf 文件不再用于在早期引导期间运行子命令;出于安全考虑,此功能已被删除。虽然记录在设置用户会话之前会咨询 $HOME/.launchd.conf,但从未实现此功能。

如何为 Spotlight 启动的新进程设置环境(无需重启)

您可以使用launchctl setenv. 例如设置路径:

launchctl setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

或者,如果您想设置路径.bashrc或类似路径,则将其镜像到 launchd:

PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
launchctl setenv PATH $PATH

无需重新启动,但如果您希望应用程序恢复更改的环境,则需要重新启动应用程序。

这包括已经在 Terminal.app 下运行的任何 shell,尽管如果您在那里,您可以更直接地设置环境,例如使用export PATH=/opt/local/bin:/opt/local/sbin:$PATHbash 或 zsh。

重启后如何保留更改

新方法(自 10.10 Yosemite 起)

使用launchctl config user path /bin:/usr/bin:/mystuff. 有关man launchctl更多信息,请参阅。

以前的方法

该答案顶部的 launchctl 手册页引用说,/etc/launchd.conf出于安全原因,此处描述的功能(在启动时读取)已被删除,因此 ymmv.

在重新启动后保留更改,您可以从 设置环境变量/etc/launchd.conf,如下所示:

setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

launchd.conf重启时会自动执行。

如果您希望这些更改现在生效,您应该使用此命令重新处理launchd.conf(感谢@mklement 的提示!)

egrep -v '^\s*#' /etc/launchd.conf | launchctl

您可以通过命令了解更多信息launchctl以及它如何加载。launchd.confman launchctl

于 2010-09-21T01:23:56.340 回答
108

直到并包括OS X v10.7 (Lion),您可以将它们设置为:

~/.MacOSX/environment.plist

看:

对于终端中的 PATH,您应该能够设置.bash_profile.profile(尽管您可能必须创建它)

对于OS X v10.8 (Mountain Lion) 及更高 版本,您需要使用launchdlaunchctl.

于 2008-09-25T20:08:30.547 回答
76

来自单一来源的命令行和 GUI 应用程序的解决方案(适用于Mac OS X v10.10 (Yosemite) 和Mac OS X v10.11 (El Capitan))

假设您~/.bash_profile在以下代码段中具有环境变量定义:

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/opt/go/libexec/bin:$GOPATH/bin"
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

我们需要一个启动代理,它将在每次登录时运行,并且随时按需运行,它将这些变量加载到用户会话中。我们还需要一个 shell 脚本来解析这些定义并构建必要的命令以由代理执行。

在目录中创建一个plist后缀(例如命名osx-env-sync.plist)的~/Library/LaunchAgents/文件,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>osx-env-sync</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-l</string>
    <string>-c</string>
    <string>
      $HOME/.osx-env-sync.sh
    </string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

-l参数在这里很关键;必须使用登录 shell执行 shell 脚本,以便~/.bash_profile在执行此脚本之前首先获取源代码。

现在,shell 脚本。~/.osx-env-sync.sh使用以下内容创建它:

grep export $HOME/.bash_profile | while IFS=' =' read ignoreexport envvar ignorevalue; do
  launchctl setenv "${envvar}" "${!envvar}"
done

确保 shell 脚本是可执行的:

chmod +x ~/.osx-env-sync.sh

现在,为当前会话加载启动代理:

launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

(重新)启动一个 GUI 应用程序并验证它是否可以读取环境变量。

设置是持久的。它将在重新启动和重新登录后继续存在。

在初始设置(您刚刚完成)之后,如果您想再次将您的任何更改反映~/.bash_profile到您的整个环境中,重新运行该launchctl load ...命令将不会执行您想要的操作;相反,您会收到如下警告:

<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress

为了在不经过注销/登录过程的情况下重新加载您的环境变量,请执行以下操作:

launchctl unload ~/Library/LaunchAgents/osx-env-sync.plist
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

最后确保您重新启动已经运行的应用程序(包括 Terminal.app),以使它们知道这些更改。

我还将此处的代码和解释推送到 GitHub 项目:osx-env-sync

我希望这将是最终的解决方案,至少对于最新版本的 OS X(Yosemite 和 El Capitan)而言。

于 2015-09-04T20:06:51.913 回答
58
  1. 做:

    vim ~/.bash_profile
    

    该文件可能不存在(如果不存在,您可以创建它)。

  2. 输入这个并保存文件:

    export PATH=$PATH:YOUR_PATH_HERE
    
  3. source ~/.bash_profile
    
于 2011-11-25T04:29:38.377 回答
36

在 OS X 中处理环境变量时基本上有两个问题需要解决。第一个是从 Spotlight(Mac 菜单/状态栏右侧的放大镜图标)调用程序时,第二个是从 Dock 调用程序时. 从终端应用程序/实用程序调用程序很简单,因为它从标准 shell 位置(~/.profile、、、~/.bash_profile~/.bashrc)读取环境。

从 Dock 调用程序时,使用~/.MacOSX/environment.plist where<dict>元素包含一系列 <key>KEY</key><string>theValue</string>元素。

从 Spotlight 调用程序时,请确保已使用您需要的所有键/值设置设置了 launchd。

为了同时解决这两个问题,我在我的用户帐户上使用了登录项(通过系统偏好设置工具设置)。登录项是一个调用 Emacs lisp 函数的 bash 脚本,当然可以使用他们最喜欢的脚本工具来完成同样的事情。这种方法还有一个额外的好处,它可以在任何时候工作并且不需要重新启动,即可以编辑~/.profile,在某些 shell 中运行登录项,并且可以从 Dock 或 Spotlight 对新调用的程序进行可见的更改。

细节:

登录项:~/bin/macosx-startup

#!/bin/bash
bash -l -c "/Applications/Emacs.app/Contents/MacOS/Emacs --batch -l ~/lib/emacs/elisp/macosx/environment-support.el -f generate-environment"

Emacs lisp 函数:~/lib/emacs/elisp/macosx/envionment-support.el

;;; Provide support for the environment on Mac OS X

(defun generate-environment ()
  "Dump the current environment into the ~/.MacOSX/environment.plist file."
  ;; The system environment is found in the global variable:
  ;; 'initial-environment' as a list of "KEY=VALUE" pairs.
  (let ((list initial-environment)
        pair start command key value)
    ;; clear out the current environment settings
    (find-file "~/.MacOSX/environment.plist")
    (goto-char (point-min))
    (setq start (search-forward "<dict>\n"))
    (search-forward "</dict>")
    (beginning-of-line)
    (delete-region start (point))
    (while list
      (setq pair (split-string (car list) "=")
            list (cdr list))
      (setq key (nth 0 pair)
            value (nth 1 pair))
      (insert "  <key>" key "</key>\n")
      (insert "  <string>" value "</string>\n")

      ;; Enable this variable in launchd
      (setq command (format "launchctl setenv %s \"%s\"" key value))
      (shell-command command))
    ;; Save the buffer.
    (save-buffer)))

注意:这个解决方案是我添加之前的解决方案,特别是由 Matt Curtis 提供的解决方案,但我故意尝试保持我的~/.bash_profile内容平台独立并将launchd环境设置(仅限 Mac 设备)放入单独的脚本中.

于 2011-03-26T20:03:52.543 回答
24

另一个免费的开源 Mac OS X v10.8 (Mountain Lion) Preference pane/environment.plist 解决方案是EnvPane

EnvPane 的源代码可在GitHub上找到。EnvPane 看起来具有与RCEnvironment类似的功能,但是,它似乎可以立即更新其存储的变量,即无需重新启动或登录,这是受欢迎的。

正如开发商所说:

EnvPane 是 Mac OS X 10.8 (Mountain Lion) 的首选项窗格,可让您在图形和终端会话中为所有程序设置环境变量。它不仅恢复了对 Mountain Lion 中 ~/.MacOSX/environment.plist 的支持,它还立即发布您对环境的更改,而无需注销并重新登录。 <SNIP> EnvPane 包括(并自动安装)一个启动代理,它在 1) 登录后及早 2) 每当 ~/.MacOSX/environment.plist 更改时运行。代理读取 ~/.MacOSX/environment.plist 并通过 launchctl setenv 和 launchctl unsetenv 使用的相同 API 将该文件中的环境变量导出到当前用户的 launchd 实例。

免责声明:我与开发人员或他/她的项目没有任何关系。

PS我喜欢这个名字(听起来像'Ends Pain')。

于 2013-01-15T14:04:25.993 回答
18

在 Mountain Lion 上,所有的/etc/paths编辑/etc/launchd.conf都没有任何效果!

苹果的开发者论坛说:

“将 .app 本身的 Info.plist 更改为包含带有所需环境变量的“LSEnvironment”字典。

~/.MacOSX/environment.plist 不再受支持。”

所以我直接编辑了应用程序Info.plist(右键单击“AppName.app”(在本例中为 SourceTree),然后单击“ Show package contents”)。

显示包装内容

我添加了一个新的密钥/字典对,称为:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(请参阅:Apple 的 LaunchServicesKeys 文档

在此处输入图像描述

现在应用程序(在我的例子中是 Sourcetree)使用给定的路径并使用 Git 1.9.3 :-)

PS:当然,您必须根据您的特定路径需求调整路径条目。

于 2013-01-24T12:30:07.560 回答
17

更新 (2017-08-04)

从(至少)macOS 10.12.6 (Sierra) 开始,此方法似乎已停止对 Apache httpd 工作(对于system和 的user选项launchctl config)。其他程序似乎没有受到影响。可以想象这是httpd的一个bug。

原始答案

这涉及 OS X 10.10+(10.11+ 特别是由于无根模式/usr/bin不再可写)。

我在多个地方读到,由于 OS X 中的错误(从个人经验来看,这似乎是正确的),因此launchctl setenv PATH <new path>用于设置PATH变量不起作用。我发现可以为未从 shell 启动的应用程序PATH设置另一种方法:

sudo launchctl config user path <new path>

该选项记录在 launchctl 手册页中:

配置系统 | 用户参数值

为 launchd(8) 域设置持久配置信息。只能配置系统域和用户域。持久存储的位置是一个实现细节,只能通过此子命令对该存储进行更改。通过此子命令所做的更改需要重新启动才能生效。

[...]

小路

将目标域内所有服务的 PATH 环境变量设置为字符串值。字符串值应符合 environ(7) 中为 PATH 环境变量概述的格式。请注意,如果服务指定了自己的 PATH,则特定于服务的环境变量将优先。

注意:此工具不能用于为域内的所有服务设置通用环境变量。出于安全原因,特意将其限定为 PATH 环境变量,仅此而已。

我已经确认这适用于从 Finder 启动的 GUI 应用程序(用于getenv获取 PATH)。请注意,您只需执行一次,更改将在重新启动后保持不变。

于 2015-10-02T07:31:35.620 回答
15

虽然这里的答案不是“错误的”,但我会添加另一个:永远不要在 OS X 中对影响“所有进程”的环境变量进行更改,甚至在 shell 之外,对于给定用户以交互方式运行的所有进程。

以我的经验,对所有进程的 PATH 等环境变量进行全局更改,在 OS X 上比在 Windows 上更容易破坏。原因是,许多 OS X 应用程序和其他软件(可能尤其包括 OS 本身的组件)在底层依赖 UNIX 命令行工具,并假设系统提供的这些工具版本的行为,并且这样做时不一定使用绝对路径(类似的注释适用于动态加载的库和 DYLD_* 环境变量)。例如,考虑到有关替换 OS X 提供的解释器版本(如 Python 和 Ruby)的各种 Stack Overflow 问题的评分最高的答案通常是“不要这样做”。

在这方面,OS X 与其他类 UNIX 操作系统(例如,Linux、FreeBSD 和 Solaris)实际上并没有什么不同。Apple 没有提供简单的方法来做到这一点的最可能原因是因为它破坏了一些东西。就 Windows 不太容易出现这些问题而言,这是由于两件事:(1) Windows 软件不像 UNIX 软件那样倾向于依赖命令行工具,以及 (2) 微软有由影响所有进程的更改引起的“DLL 地狱”和安全问题的历史如此广泛,以至于它们已经更改了较新 Windows 版本中动态加载的行为,以限制“全局”配置选项(如 PATH)的影响。

“蹩脚”与否,如果您将此类更改限制在较小的范围内,您将拥有一个更加稳定的系统。

于 2012-07-17T01:46:15.560 回答
15

有时,所有先前的答案都根本不起作用。如果您想M2_HOME在 Eclipse 或 IntelliJ IDEA 中访问系统变量(如 ),那么在这种情况下唯一对我有用的是:

首先(第 1 步)编辑/etc/launchd.conf以包含这样的一行:“setenv VAR value”,然后(第 2 步)重新启动。

简单地修改 .bash_profile 是行不通的,因为在 OS X 中,应用程序不像在其他 Unix 中那样启动;它们不继承父级的 shell 变量。由于我不知道的原因,所有其他修改都不起作用。也许其他人可以澄清这一点。

于 2009-01-16T12:12:17.137 回答
13

在追逐环境变量首选项窗格并发现链接已损坏并且在 Apple 网站上的搜索似乎表明他们已经忘记了它之后......我开始回到难以捉摸的启动过程的踪迹。

在我的系统(Mac OS X 10.6.8)上,似乎 environment.plist定义的变量被可靠地导出到从 Spotlight 启动的应用程序(通过 launchd)。我的麻烦是这些变量没有被导出到终端中的新 bash 会话中。即我有这里描述的相反问题。

注意: environment.plist 看起来像 JSON,而不是 XML,如前所述

我能够通过编辑 ~/MacOSX/environment.plist让 Spotlight 应用程序查看变量, 并且 通过将以下内容添加到我的 .profile 文件中,我能够强制相同的变量进入新的终端会话:

eval $(launchctl export)
于 2011-07-06T23:59:07.153 回答
11

任何 Bash 启动文件 -- ~/.bashrc, ~/.bash_profile, ~/.profile. 在 GUI 应用程序中还有一些以~/.MacOSX/environment.plist环境变量命名的奇怪文件。

于 2008-09-25T20:08:50.857 回答
10

就像马特柯蒂斯给出的答案一样,我通过launchctl设置环境变量,但我将它包装在一个名为export的函数中,这样每当我在我的.bash_profile中导出一个正常的变量时,它也是由launchctl设置的。这是我所做的:

  1. 我的 .bash_profile 仅包含一行,(这只是个人喜好。)

    source .bashrc
    
  2. 我的 .bashrc 有这个:

    function export()
    {
        builtin export "$@"
        if [[ ${#@} -eq 1 && "${@//[^=]/}" ]]
        then
            launchctl setenv "${@%%=*}" "${@#*=}"
        elif [[ ! "${@//[^ ]/}" ]]
        then
            launchctl setenv "${@}" "${!@}"
        fi
    }
    
    export -f export
    
  3. 以上将重载 Bash 内置“export”并正常导出所有内容(您会注意到我用它导出“export”!),然后通过 launchctl 为 OS X 应用程序环境正确设置它们,无论您使用以下任何一种:

    export LC_CTYPE=en_US.UTF-8
    # ~$ launchctl getenv LC_CTYPE
    # en_US.UTF-8
    PATH="/usr/local/bin:${PATH}"
    PATH="/usr/local/opt/coreutils/libexec/gnubin:${PATH}"
    export PATH
    # ~$ launchctl getenv PATH
    # /usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
    export CXX_FLAGS="-mmacosx-version-min=10.9"
    # ~$ launchctl getenv CXX_FLAGS
    # -mmacosx-version-min=10.9
    
  4. 这样我就不必每次都将每个变量都发送到 launchctl,我可以让我的 .bash_profile / .bashrc 以我想要的方式设置。打开终端窗口,检查您感兴趣的环境变量launchctl getenv myVar,更改 .bash_profile/.bashrc 中的某些内容,关闭终端窗口并重新打开它,使用 launchctl 再次检查变量,瞧,它已更改。

  5. 同样,与后 Mountain Lion 世界的其他解决方案一样,对于任何可用于应用程序的新环境变量,您需要在更改后启动或重新启动它们。

于 2014-02-27T16:53:44.623 回答
10

这是一种非常简单的方法来做你想做的事。就我而言,它让 Gradle 工作(对于 Android Studio)。

  • 打开终端。
  • 运行以下命令:

    sudo nano /etc/paths或者sudo vim /etc/paths

  • 出现提示时输入您的密码。

  • 转到文件底部,然后输入要添加的路径。
  • 点击Control+X退出。
  • 输入“Y”以保存修改后的缓冲区。
  • 打开一个新的终端窗口,然后输入:

    echo $PATH

您应该会看到附加到 PATH 末尾的新路径。

我从这篇文章中得到了这些细节:

在 Mac OS X 10.8 Mountain Lion 及更高版本上添加到 PATH

于 2013-09-24T03:24:00.180 回答
8

我认为 OP 正在寻找一个简单的、类似 Windows 的解决方案。

干得好:

http://www.apple.com/downloads/macosx/system_disk_utilities/environmentvariablepreferencepane.html

于 2010-12-02T14:37:51.463 回答
7

简洁明了每个文件的用途

  • ~/.profile每次启动 Terminal.app 时都会获取
  • ~/.bashrc是“传统上”设置 Bash 环境的所有导出语句的位置
  • /etc/paths是 Mac OS 中的主文件,其中包含为所有用户构建 PATH 环境变量的默认路径列表
  • /etc/paths.d/包含包含其他搜索路径的文件

非终端程序不会像您的终端那样继承系统范围的 PATH 和 MANPATH 变量!要为特定用户启动的所有进程设置环境,从而使环境变量可用于 Mac OS X GUI 应用程序,必须在您的~/.MacOSX/environment.plist(Apple Technical Q&A QA1067)中定义这些变量

使用以下命令行与您environment.plist同步/etc/paths

defaults write $HOME/.MacOSX/environment PATH "$(tr '\n' ':' </etc/paths)"
于 2014-11-09T15:36:21.910 回答
6

/etc/launchd.conf 不用于 OS X v10.10 (Yosemite)、OS X v10.11 (El Capitan)、macOS v10.12 (Sierra) 或 macOS v10.13 (High Sierra)。


launchctl手册页:

/etc/launchd.conf file is no longer consulted for subcommands to run during early boot time;
this functionality was removed for security considerations.

这个Ask Different答案中描述的方法对我有用(重启后):从 Dock 或 Spotlight 启动的应用程序继承了我在~/Library/LaunchAgents/my.startup.plist. (就我而言,我需要为 Sublime Text 插件设置LANG, to en_US.UTF-8。)

于 2018-01-07T17:32:55.300 回答
5

该变量$PATHpath_helper受./etc/paths/etc/paths.d

更详尽的描述可以在 Leopard (2008-11)中的 PATH 和其他环境问题中找到

于 2012-03-22T11:16:28.733 回答
5

只是这样做非常简单快捷。首先从终端创建一个~/.bash_profile :

touch .bash_profile

然后

open -a TextEdit.app .bash_profile

添加

export TOMCAT_HOME=/Library/Tomcat/Home

保存文件,你就完成了。

于 2014-10-08T18:56:38.637 回答
3

好吧,我不确定/etc/pathsand~/.MacOSX/environment.plist文件。那些是新的。

但是对于 Bash,您应该知道它.bashrc在每次新的 shell 调用时都会执行,并且.bash_profile只在启动时执行一次。

我不知道 Mac OS X 出现这种情况的频率有多高。我认为随着窗口系统启动所有内容,这种区别已经消失。

就个人而言,我通过创建一个.bashrc包含我需要的所有内容的文件来消除混淆,然后执行以下操作:

ln -s .bashrc .bash_profile
于 2008-09-25T21:12:55.023 回答
3

对于单个用户修改,请使用~/.profile您列出的修改。以下链接解释了 Bash 何时读取不同的文件。

http://telin.ugent.be/~slippens/drupal/bashrc_and_others

如果要为 gui 应用程序设置环境变量,则需要 ~/.MacOSX/environment.plist 文件

于 2008-09-25T20:09:14.553 回答
3

除了建议的方法之外,需要注意的一件事是,至少在OS X 10.5launchd.conf (Leopard) 中,设置的变量将与.profile. 我想这也可能对设置有效~/.MacOSX/environment.plist,但我还没有验证。

于 2011-02-07T00:12:17.977 回答
3

这很简单:

编辑 ~/.profile 并把你的变量如下

$ vim ~/.profile

在文件中:

MY_ENV_VAR=值

  1. 保存 ( :wq )

  2. 重新启动终端(退出并再次打开)

  3. 确保一切正常:

$ 回声 $MY_ENV_VAR

美元价值


于 2014-01-25T01:55:30.190 回答
3

这很简单。编辑文件.profile(vi、nanoSublime Text或其他文本编辑器)文件。您可以在~/目录(用户目录)中找到它并设置如下:

export MY_VAR=[your value here]

Java 主页示例:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/current

保存并返回终端。

您可以使用以下方法重新加载它:

source .profile

或者关闭并打开您的终端窗口。

于 2014-02-17T16:25:58.707 回答
3

在 Mac OS 上设置 PATH 环境变量

打开终端程序(默认情况下,它位于您的 Applications/Utilities 文件夹中)。运行以下命令

touch ~/.bash_profile; open ~/.bash_profile

这将在您的默认文本编辑器中打开该文件。

以 Android SDK 为例:

您需要将路径添加到您的 Android SDK 平台工具和工具目录。在我的示例中,我将使用“/Development/android-sdk-macosx”作为安装 SDK 的目录。添加以下行:

export PATH=${PATH}:/Development/android-sdk-macosx/platform-tools:/Development/android-sdk-macosx/tools

保存文件并退出文本编辑器。执行您的 .bash_profile 以更新您的 PATH:

source ~/.bash_profile

现在,每次打开终端程序时,您的 PATH 都将包含 Android SDK。

于 2013-12-19T11:54:49.450 回答
3

iOS 上的所有魔法都只与文件一起使用source,您可以在其中导出环境变量。

例如:

您可以像这样创建一个文件:

export bim=fooo
export bom=bar

将此文件另存为bimbom.env,然后执行source ./bimbom.ev. 瞧,你得到了你的环境变量。

检查它们:

echo $bim
于 2018-10-15T20:00:28.977 回答
2

登录外壳

/etc/profile

shell 首先执行 file 中的命令/etc/profile。使用 root 权限的用户可以设置这个文件来为运行 Bash 的用户建立系统范围的默认特性。

.bash_profile
.bash_login
.profile

接下来,shell 会按顺序查找~/.bash_profile、、~/.bash_login~/.profile(~/ 是主目录的简写),执行它找到的第一个文件中的命令。您可以将命令放在这些文件之一中以覆盖/etc/profile. 在虚拟终端上运行的 shell 不会执行这些文件中的命令。

.bash_logout

当您注销时,bash 会执行~/.bash_logout文件中的命令。该文件通常包含在会话后清理的命令,例如删除临时文件的命令。

交互式非登录外壳

/etc/bashrc

虽然不直接被 bash 调用,但是很多~/.bashrc文件调用/etc/bashrc. 此设置允许使用 root 权限的用户为非登录 bash shell 建立系统范围的默认特征。

.bashrc

交互式非登录 shell 执行~/.bashrc文件中的命令。通常,登录 shell 的启动文件(例如.bash_profile)运行此文件,因此登录和非登录 shell 都运行.bashrc.

因为 in 中的命令.bashrc可能会执行多次,并且因为子 shell 继承了导出的变量,所以最好将添加到现有变量的命令放在.bash_profile文件中。

于 2015-04-27T20:53:05.427 回答
2

这里有两种类型的炮弹。

  • 非登录:每次启动新的 Bash 副本时都会重新加载 .bashrc
  • 登录:仅当您登录或明确告诉 Bash 加载它并将其用作登录 shell 时才会加载 .profile。

这里重要的是要理解,使用 Bash,文件.bashrc只能由交互式和非登录的 shell 读取,您会发现人们经常加载.bashrc.bash_profile克服这个限制。

现在您已经有了基本的了解,让我们继续讨论我将如何建议您进行设置。

  • .profile:创建它不存在。把你的 PATH 设置放在那里。
  • .bashrc:如果不存在则创建。把你所有的别名和自定义方法放在那里。
  • .bash_profile:如果不存在则创建。将以下内容放入其中。

.bash_file:

#!/bin/bash
source ~/.profile # Get the PATH settings
source ~/.bashrc  # Get Aliases and Functions
#
于 2015-01-21T22:49:32.247 回答
1

2022 年 2 月(MacOs 12+)

此处的解决方案应该在重新启动或应用程序重新启动后工作。

命令行界面

打开您选择的 CLI 配置文件。

  • 对于 bash 打开~/.bash_profile
  • 对于 zsh 打开~/.zshrc

添加(或替换)

export varName=varValue 

(如果varValue里面有空格 - 把它包起来"

确保重新启动命令行应用程序。

图形用户界面

完成 CLI 步骤。确保 GUI 应用程序已关闭。从命令行打开 GUI 应用程序。例如:

open /Applications/Sourcetree.app

(您也可以在 中为该命令起别名.zshrc

原则

  • Mac 没有为所有上下文设置环境变量的配置选项。
  • 避免更改用户配置文件之外的任何内容。

不再工作了

  • launchctl config user varName varVal(MacOS 12.1+)
  • 编辑/etc/launchd.conf
  • plist带后缀的xml文件
于 2022-02-02T16:24:43.013 回答
0

对于 Bash,请尝试将您的环境变量添加到文件/etc/profile中,以使它们可供所有用户使用。无需重新启动,只需启动一个新的终端会话。

于 2011-07-10T11:31:00.727 回答
0

我个人的做法是.bash_profile。我在那里添加路径并附加到路径变量,

GOPATH=/usr/local/go/bin/
MYSQLPATH=/usr/local/opt/mysql@5.6/bin

PATH=$PATH:$GOPATH:$MYSQLPATH

之后,我可以拥有单独的 Path byecho $GOPATHecho$MYSQLPATHall by echo $PATH

于 2019-10-23T07:40:08.630 回答