在 Mac OS X Lion 上设置环境变量

Posted

技术标签:

【中文标题】在 Mac OS X Lion 上设置环境变量【英文标题】:Set environment variables on Mac OS X Lion 【发布时间】:2011-11-22 00:49:26 【问题描述】:

当有人说“编辑你的 .plist 文件”或“你的 .profile”或“.bash_profile”等时,这只会让我感到困惑。我不知道这些文件在哪里,如果我必须这样做的话如何创建它们等等,以及为什么似乎有这么多不同的文件(为什么?他们做不同的事情吗?)

那么有人可以非常耐心地向以前的 Windows 用户解释一下如何一步一步地做到这一点吗?

我需要为 GUI 应用程序和命令行应用程序设置变量,目前它是为需要变量的 ant 脚本设置的,但很可能还有其他需求。

请注意,我也有 Lion,因为您在 Google 上搜索到的许多答案对于 Lion 来说似乎已经过时了......

另外请注意,我使用终端的经验几乎为零。我愿意学习,但是请新手解释一下...

【问题讨论】:

如果您尝试从诸如 spring 之类的应用程序中读取答案,则所有答案都不起作用。 【参考方案1】:

首先,要认识到 OS X 的一个特点是它是基于 Unix 构建的。这就是 .bash_profile 的用武之地。在 OS X 中启动终端应用程序时,默认情况下会得到一个 bash shell。 bash shell 来自 Unix,加载时会运行 .bash_profile 脚本。您可以为您的用户修改此脚本以更改您的设置。该文件位于:

~/.bash_profile

小牛队更新

OS X Mavericks 不使用 environment.plist - 至少不用于 OS X windows 应用程序。您可以将launchd configuration 用于窗口应用程序。 .bash_profile 仍然受支持,因为它是终端中使用的 bash shell 的一部分。

仅限狮子和山狮

OS X 窗口应用程序从您的 environment.plist 文件中接收环境变量。这可能就是您所说的“.plist”文件的意思。该文件位于:

~/.MacOSX/environment.plist

如果您对 environment.plist 文件进行更改,则 OS X Windows 应用程序(包括终端应用程序)将设置这些环境变量。您在 .bash_profile 中设置的任何环境变量只会影响您的 bash shell。

通常我只在我的 .bash_profile 文件中设置变量,而不更改 .plist 文件(或 Mavericks 上的 launchd 文件)。大多数 OS X 窗口应用程序不需要任何自定义环境。只有当应用程序确实需要特定的环境变量时,我才会更改 environment.plist(或 Mavericks 上的 launchd 文件)。

听起来您想要更改 environment.plist 文件,而不是 .bash_profile。

最后一件事,如果您查找这些文件,我想您将找不到它们。如果我没记错的话,它们不在我最初安装的 Lion 中。

编辑:以下是创建 plist 文件的一些说明。

    打开 Xcode 选择文件 -> 新建 -> 新建文件... 在 Mac OS X 下选择资源 选择一个 plist 文件 按照其余提示进行操作

要编辑文件,您可以按住 Control 键单击以获取菜单并选择添加行。然后,您可以添加键值对。对于环境变量,键是环境变量名称,值是该环境变量的实际值。

创建 plist 文件后,您可以使用 Xcode 打开它,以便随时修改它。

【讨论】:

好的,谢谢。我想我已经理解波浪号意味着我所谓的主文件夹,对吧(即 /Users/Anders 在我的情况下)?因此,如果它们不存在,我应该使用您提到的名称创建一个新的空文本文件(是否允许我创建一个以点开头的文件?)?然后在这些文件中添加什么来设置环境变量?例如,我需要添加一个变量 AHF_OPT,它应该指向一个 ant 脚本所需的文件夹,我如何在这两个文件中添加它? 要尝试两件事:首先,您粘贴的字符串是否在 ".dtd>" 后有一个不正确的分号 也许这是一个复制和粘贴错误,但我必须删除它才能让 Xcode 读取文件。其次,您可能需要注销并重新登录才能生效。 了解~/.bashrc 也很有用。 ~/.bashrc 文件在您每次打开新的非登录 bash shell(如 xterm / aterm)时运行,而~/.bash_profile 仅在登录 shell 时运行,即当您首次登录系统时。 在developer.apple.com/library/mac/#qa/qa1067/_index.html 找到了关于添加 environment.plist 的很好的清晰解释。 很好的答案,除了尴尬的短语“OS X windows application”。这比将 X11 称为“X Windows”还要糟糕。最好将其称为 Aqua 或仅称为“.app 应用程序”。【参考方案2】:

您的.profile.bash_profile 只是位于“主”文件夹中的文件。如果您打开 Finder 窗口并在“收藏夹”窗格中单击您的帐户名称,您将看不到它们。如果您打开终端窗口并键入 ls 以列出文件,您仍然看不到它们。但是,您可以在终端中使用ls -a 找到它们。或者,如果你打开你最喜欢的文本编辑器(比如说 TextEdit,因为它是 OS X 自带的)并执行 File->Open,然后按 Command+Shift+。 并单击您的帐户名称(主文件夹),您也会看到它们。如果您没有看到它们,那么您可以在您喜欢的文本编辑器中创建一个。

现在,添加环境变量相对简单,并且在概念上与 Windows 非常相似。在您的 .profile 中,每行添加一个变量名称及其值,如下所示:

export JAVA_HOME=/Library/Java/Home
export JRE_HOME=/Library/Java/Home

等等

如果您要修改“PATH”变量,请确保包含已为您设置的系统默认 PATH:

export PATH=$PATH:/path/to/my/stuff

现在这是古怪的部分,您可以打开一个新的终端窗口以使新变量生效,或者您需要键入 .profile.bash_profile 重新加载文件并将内容应用于您当前终端的环境。

您可以使用终端中的“set”命令检查您的更改是否生效。只需输入set(或set | more,如果您喜欢分页列表)并确保您添加到文件中的内容就在那里。

至于向 GUI 应用程序添加环境变量,这通常是没有必要的,我想了解更多关于您具体尝试做的事情,以便更好地为您提供答案。

【讨论】:

谢谢,我不太明白最后一部分,我要么必须打开终端窗口来设置它们,要么输入 .profile?但是我不必打开终端窗口来输入 .profile 吗?如果它们只是通过打开终端窗口自动设置,那么我为什么需要输入...?当我打开一个时,它们会被永久设置吗?我可能误解了你,因为即使是我的问题对我来说也没有意义...... 如果您在更改配置文件之前打开了终端窗口,这些更改将不会反映在现有终端的环境中。您的快速解决方案是打开一个新的终端窗口。就这样。每个新窗口都将设置 .profile 中的所有内容。总是。修复旧的、已经打开的窗口的方法是键入“..profile” 2 个句点,它们之间有 1 个空格。 “set”命令是设置环境变量,当你结束你设置的会话时会死掉。使用不带参数的“set”列出当前设置的变量。 啊,我看到了我造成的混乱。如果您没有打开终端窗口,那么每个新窗口都会在打开时加载 .profile,您无需执行任何操作。另一方面,如果您在终端窗口中编辑了 .profile 或之前打开了终端窗口并希望在其中进行更改,那么您只需键入 . .profile 即可加载它们。 我无法让它工作。我在/Users/Anders下添加了一个文件.bash_profile,行export AXF_DIR=/Applications/Antenna/AHFormatterV53,但是ant进程仍然找不到变量AXF_DIR ...另外,我在终端中尝试了set命令,并获得了很多信息,但没有关于这个变量的信息。请注意,我还重新启动了系统以确保,并且我还启动了一个新的终端窗口... 尝试将其命名为 .profile。我刚刚偷看了我最近买的一台机器,这些天他们似乎在使用.profile,而不是.bash_profile【参考方案3】:

以下是关于 Lion OS 10.7.x 中 PATH 变量的更多信息:

如果需要全局设置PATH,系统会按照以下顺序构建PATH:

    解析文件/private/etc/paths的内容,每行一个路径 正在解析文件夹/private/etc/paths.d 的内容。该文件夹中的每个文件都可以包含多个路径,每行一个路径。加载顺序首先由文件名决定,然后是文件中的行顺序。 /private/etc/launchd.conf 中的 setenv PATH 语句,它会将路径追加到已在 #1 和 #2 中构建的路径(您不得使用 $PATH 来引用具有目前已建成)。但是,考虑到其他两个选项,在这里设置 PATH 是完全没有必要的,尽管这是可以为所有用户设置其他全局环境变量的地方。

这些路径和变量由所有用户和应用程序继承,因此它们是真正全局的——注销和登录不会重置这些路径——它们是为系统构建的,并且是在任何用户有机会之前创建的登录,因此对这些更改需要重新启动系统才能生效。

顺便说一句,全新安装的 OS 10.7.x Lion 没有我能找到的 environment.plist,因此它可能有效,但也可能被弃用。

【讨论】:

好的,非常感谢!这比简单的 .profile 要复杂一些。 如果您使用paths.d 方式并且您有一个包含包含空格的文件夹的路径,请不要转义它们。如果你试图逃避它们(我认为这是常见的做法?)它不起作用(至少对我来说)。我在这里读到这个:sweeting.org/mark/blog/2008/05/26/…(搜索“空格”)。希望这对其他人有帮助! @MichaelTrouw 你的评论帮了我很多忙!我正在为空格添加转义符,但这不是必需的!我在 Mac OS 10.9.2 @jon,paths.dpaths 有何不同?另外,前者会覆盖后者吗?【参考方案4】:
echo $PATH

它打印当前路径值

然后做vim ~/.bash_profile并写

export PATH=$PATH:/new/path/to/be/added

在这里您要附加到旧路径,因此保留旧路径并将新路径添加到其中

然后做

source ~/.bash_profile

这将执行它并添加路径

然后再次检查

echo $PATH

【讨论】:

“vim”命令应该是 vim ~/.bash_profile 我试图编辑帖子但 SO 告诉我编辑必须是 6 个字符:/【参考方案5】:

不幸的是,这些答案都没有解决我遇到的具体问题。

这是一个简单的解决方案,无需与bash 混淆。就我而言,它让gradle 工作(对于android Studio)。

顺便说一句,这些步骤与 OSX (Mountain Lion 10.8.5) 相关

打开终端。

运行以下命令:

sudo nano /etc/paths(或sudo vim /etc/paths for vim)

转到文件底部,输入您要添加的路径。 按 control-x 退出。 输入“Y”保存修改后的缓冲区。

打开一个新的终端窗口然后输入:

echo $PATH

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

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

http://architectryan.com/2012/10/02/add-to-the-path-on-mac-os-x-mountain-lion/#.UkED3rxPp3Q

希望能帮到别人

【讨论】:

经过 3 个小时的尝试理解和导出任何工作,我尝试了这个并且它成功了。少了一步。我会添加它。 @1.21gigawatts 啊,太好了,很高兴它帮到了你,感谢编辑 更新:这可行,但编辑后必须重新启动系统。 完美适用于 MacOS 10.12.X【参考方案6】:

简单说明

这个帖子/问题有点老了,所以我将为 OS X Lion 用户回答一个简化版本。 默认情况下,OSX Lion 没有以下任何文件:

~/.bashrc ~/.bash_profile ~/.profile

最多,如果您在终端中执行过任何操作,您可能会看到 ~/.bash_history

这是什么意思

您必须创建文件来设置您的默认 bash 命令(通常在 ~/.bashrc 中)。为此,请使用任何类型的编辑器,但在终端中更简单:

    %> emacs .profile [来自带有 emacs 类型:]source ~/.bashrc [来自 w/in emacs 类型:]Ctrl + x Ctrl + s(保存文件) [来自 w/in emacs 类型:]Ctrl + x Ctrl + c(关闭 emacs) %> emacs .bashrc [在 emacs 中键入/粘贴所有 bash 命令,保存并退出]

下次您退出并重新加载终端时,它应该会加载您的所有 bash 首选项。为了更好地衡量,将命令分隔成有用的文件名通常是个好主意。例如,在 ~/.bashrc 中,您应该有一个 source ~/.bash_aliases 并将所有别名命令放在 ~/.bash_aliases 中。

【讨论】:

为什么他们把它删掉了? @Pacerier 我不确定他们是否删除了它,但如果没有自定义,这些文件就没有必要了。问题是对于任何刚接触终端/shell、OSX 或 BSD 的人来说,这些文件并不明显,因此更难了解。 那么他们用什么代替了它? 它们是可选的,所以他们没有用任何东西替换它;这是一个RC文件【参考方案7】:

对我有用的是用我需要的变量创建一个.launchd.conf

setenv FOO barbaz

这个文件在登录时被launchd读取。您可以使用以下方法将变量“即时”添加到正在运行的launchd:

launchctl setenv FOO barbaz`

其实.launchd.cond 只是包含了launchctl 命令。

以这种方式设置的变量似乎正确地存在于 GUI 应用程序中。

如果您碰巧尝试以这种方式设置 LANG 或 LC_ 变量,并且您碰巧使用的是 iTerm2,请确保禁用您正在使用的配置文件的终端选项卡下的“自动设置语言环境变量”设置使用。这似乎覆盖了 launchd 的环境变量,在我的情况下,设置损坏的 LC_CTYPE 会导致远程服务器出现问题(已通过变量)。

(不过,environment.plist 似乎仍然适用于我的 Lion。您可以使用 RCenvironment 首选项窗格来维护文件,而不是手动编辑它或需要 Xcode。似乎仍然适用于 Lion,尽管它是最后一次更新是雪豹时代的。我个人比较喜欢。)

【讨论】:

迄今为止最简单的答案。请注意,您需要完全关闭终端应用程序并重新打开它以使任何更改生效 - 而不仅仅是关闭单个终端窗口。 这个答案过于精简,无法用于 OP。怎么创建?在哪里创建? 更清晰、更及时的答案:***.com/questions/135688/…【参考方案8】:

在 Mac OS 上设置 PATH 环境变量

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

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。

【讨论】:

谢谢。不知道为什么,但只有这个解决方案对我有用,而不是上面的那些。 我按你说的添加了环境变量,但我不能在 xcode 中使用它,你有什么想法吗?我需要在标题搜索路径中使用它。提前致谢。【参考方案9】:

向 OS X Lion 添加路径变量

这很简单,在终端中对我有用:

$echo "export PATH=$PATH:/path/to/whatever" >> .bash_profile #replace "/path/to/whatever" with the location of what you want to add to your bash profile, i.e: $ echo "export PATH=$PATH:/usr/local/Cellar/nginx/1.0.12/sbin" >> .bash_profile 
$. .bash_profile #restart your bash shell

这里也有类似的回复:http://www.mac-forums.com/forums/os-x-operating-system/255324-problems-setting-path-variable-lion.html#post1317516

【讨论】:

值得注意的是,您需要从主目录的根目录运行它。通过发出不带参数的cdcd ~/ 来确保您的位置。 也不需要重启shell。使用source .bash_profile 我喜欢这种方法,因为它很短。但这似乎不起作用。我做了echo "export PATH=$PATH:/Applications/XAMPP/xamppfiles/bin/mysql" >> .bash_profile 然后我唯一可以做mysql -u root -p 是如果我已经在root 下运行。而我可以在任何地方使用Applications/XAMPP/xamppfiles/bin/mysql -u root -p。我尝试了两种提到的重启方法:Yaw 和@ephsmith。 另外,如果我以 root 身份执行 ech $PATH(即 sudo su),我会得到 /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/XAMPP/xamppfiles/bin。当我不是 root 时,我会得到 /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin $PATH 变量是用户特定的(root 是用户)。【参考方案10】:

打开终端:

vi ~/.bash_profile

应用更改到系统(无需重新启动计算机):

source ~/.bash_profile

(也适用于 macOS Sierra 10.12.1)

【讨论】:

【参考方案11】:

我在 Maveric 上使用 Eclipse(作为 GUI 启动,而不是从脚本启动)时遇到问题,它没有采用自定义 PATH。我尝试了上面提到的所有方法都无济于事。最后我根据here的提示找到了最简单的工作答案:

    转到 /Applications/eclipse/Eclipse.app/Contents 文件夹

    使用文本编辑器(或 XCode)编辑 Info.plist 文件,为具有 完整路径的环境变量添加 LSEnvironment 字典。请注意,它还包括 /usr/bin 等:

    <dict>
      <key>LSEnvironment</key>
      <dict>
            <key>PATH</key>
            <string>/usr/bin:/bin:/usr/sbin:/sbin:/dev/android-ndk-r9b</string>
      </dict>
      <key>CFBundleDisplayName</key>
      <string>Eclipse</string>
      ...
    

    重新加载应用程序的参数

    /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.fra‌​mework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app
    

    重启 Eclipse

【讨论】:

【参考方案12】:

让我以非常多余的方式从我的个人示例中说明您。

    首先在安装 JDK 后,确保它已安装。

    有时 macOS 或 Linux 会自动为您设置环境变量,这与 Windows 不同。但情况并非总是如此。所以让我们检查一下。 如果未设置环境变量,则 echo $JAVA_HOME 之后的行将为空。在你的情况下它必须是空的。

    现在我们需要检查是否有 bash_profile 文件。 你看到在我的例子中我们已经有了 bash_profile。如果没有,我们必须创建一个 bash_profile 文件。

    创建一个 bash_profile 文件。

    再次检查以确保 bash_profile 文件存在。

    现在让我们打开 bash_profile 文件。 macOS 使用其默认的 TextEdit 程序打开它。

    这是保存环境变量的文件。如果你打开了一个新的 bash_profile 文件,它必须是空的。就我而言,它已经为 python 编程语言和 Anaconda 发行版设置了。现在,我需要为 Java 添加环境变量,它只是添加第一行。您必须逐字输入第一行。只是第一行。保存并关闭 TextEdit。然后关闭终端。

    再次打开终端。让我们检查一下是否设置了环境变量。

【讨论】:

【参考方案13】:

我走的是白痴路线。 将这些添加到 /etc/profile 的末尾

for environment in `find /etc/environments.d -type f`
do
     . $environment
done

创建了一个文件夹 /etc/environments 在其中创建一个名为“oracle”或“whatever”的文件,并将我需要全局设置的内容添加到其中。

/etc$ cat /etc/environments.d/Oracle

export PATH=$PATH:/Library/Oracle/instantclient_11_2
export DYLD_LIBRARY_PATH=/Library/Oracle/instantclient_11_2
export SQLPATH=/Library/Oracle/instantclient_11_2
export PATH=$PATH:/Library/Oracle/instantclient_11_2
export TNS_ADMIN=/Library/Oracle/instantclient_11_2/network/admin

【讨论】:

【参考方案14】:

更多细节,可能对某人有帮助:

由于我自己的探索,我现在知道如何以 8 种不同方式中的 7 种方式设置环境变量。我试图让一个 envar 通过我在 Xcode 下开发的应用程序。我使用这些不同的方法设置“tracer”envars 来告诉我哪些方法将它纳入我的应用程序范围。从下面,您可以看到在 Xcode 中编辑“方案”以添加参数是有效的,“putenv”也是如此。什么没有在那个范围内设置它:~/.MACOS/environment.plist,特定于应用程序的 plist,.profile,并添加一个构建阶段来运行自定义脚本(我在 Xcode [至少] 中找到了另一种设置方式一个但是忘记了我叫什么追踪器,现在找不到了;也许它在另一台机器上....)

GPU_DUMP_DEVICE_KERNEL 为 3

GPU_DUMP_TRK_ENVPLIST 为(空)

GPU_DUMP_TRK_APPPLIST 为(空)

GPU_DUMP_TRK_DOTPROFILE 为(空)

GPU_DUMP_TRK_RUNSCRIPT 为(空)

GPU_DUMP_TRK_SCHARGS 为 1

GPU_DUMP_TRK_PUTENV 为 1

...另一方面,如果我进入终端并说“设置”,它似乎唯一得到的就是来自 .profile 的那个(我原以为它也会选择 environment.plist,并且我敢肯定,有一次我确实在 Terminal 中看到了第二个示踪剂 envar,所以从那时起,有些事情可能变得很不稳定。漫长的一天....)

【讨论】:

【参考方案15】:

建议在设置任何环境变量之前检查默认终端shell,通过以下命令:

$ echo $SHELL
/bin/zsh

如果您的默认终端是 /bin/zsh (Z Shell),就像我的情况一样(个人更喜欢 Z Shell),那么您应该在 ~/.zshenv 文件,内容如下(在本例中,设置 JAVA_HOME 环境变量,但同样适用于其他):

export JAVA_HOME="$(/usr/libexec/java_home)"

同样的,上面没有提到的任何其他终端类型,你应该在其各自的终端环境文件中设置环境变量。

【讨论】:

【参考方案16】:

第一步:打开~/.bash_profile

现在打开一个文本编辑器:

Step2:变量名大写。在这个例子中变量是NODE_ENV

第三步:export NODE_ENV=development

保存并关闭。

重启系统。

完成。

检查环境变量:打开终端并输入

echo $NODE_ENV 

【讨论】:

以上是关于在 Mac OS X Lion 上设置环境变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在Mac OS X上安装 Ruby运行环境

如何在Mac OS X上部署开发环境

如何在Mac OS X Yosemite上安装 jdk 1.6 开发环境

如何在 OS X 上使用 LaTeX

无法在 Mac Lion 上升级 Maven - 环境变量

如何在 Mac OS X 10.9 上设置 JAVA_HOME 环境变量?