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

时间:2011-09-21 14:37:10

标签: macos environment-variables osx-lion

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

所以有人可以非常耐心地向以前的Windows用户解释(想要更加熟悉令人愉快的,如果最初有点令人困惑的OS X世界)如何一步一步地做到这一点?

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

请注意我也有狮子,因为谷歌的许多答案似乎已经过时了......

另请注意,我几乎没有使用终端的经验。我愿意学习,但请为新手解释......

16 个答案:

答案 0 :(得分:394)

首先,要识别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文件的一些说明。

  1. 打开Xcode
  2. 选择文件 - >新 - >新文件......
  3. 在Mac OS X下选择资源
  4. 选择一个plist文件
  5. 按照提示的其余部分
  6. 要编辑文件,您可以按住Control键单击以获取菜单,然后选择添加行。然后,您可以添加键值对。对于环境变量,键是环境变量名称,值是该环境变量的实际值。

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

答案 1 :(得分:218)

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

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

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

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

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

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

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

至于向GUI应用程序添加环境变量,这通常是没有必要的,我希望更多地了解您正在尝试做些什么来更好地为您提供答案。

答案 2 :(得分:76)

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

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

  1. 解析文件/private/etc/paths的内容,每行一个路径
  2. 解析文件夹/private/etc/paths.d的内容。该文件夹中的每个文件都可以包含多个路径,每行一个路径。加载顺序首先由文件名确定,然后由文件中的行顺序决定。
  3. setenv PATH中的/private/etc/launchd.conf语句,它将追加该路径到已在#1和#2中构建的路径(您不能使用$ PATH来引用到目前为止已构建的PATH变量)。但是,考虑到其他两个选项,在这里设置PATH是完全没必要的,尽管这是可以为所有用户设置其他全局环境变量的地方。
  4. 这些路径和变量由所有用户和应用程序继承,因此它们是真正全局的 - 注销并且不会重置这些路径 - 它们是为系统构建的,并且在任何用户获得机会之前创建要登录,因此对这些更改需要重新启动系统才能生效。

    顺便说一下,OS 10.7.x Lion的全新安装没有我能找到的environment.plist,所以它可能有用,但也可能会被弃用。

答案 3 :(得分:49)

echo $PATH

它打印当前路径值

然后执行vim ~/.bash_profile并写

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

此处您将附加到旧路径,因此保留旧路径并添加新路径

然后做

source ~/.bash_profile

这将执行它并添加路径

然后再次检查

echo $PATH

答案 4 :(得分:30)

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

这是一个简单的解决方案,无需弄乱bash。在我的情况下,它正在gradle工作(Android Studio)。

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

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

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

    nano

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

    echo $PATH

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

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

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

我希望能帮助别人

答案 5 :(得分:23)

简化说明

这篇文章/问题有点陈旧,所以我将回答OS X Lion用户的简化版本。 默认情况下,OSX Lion没有以下任何文件:

  • 〜/ .bashrc中
  • 〜/ .bash_profile中
  • 〜/ .profile中

最多,如果您在终端中做了任何事情,您可能会看到〜/ .bash_history

意味着什么

您必须创建文件以设置默认的bash命令(通常在〜/ .bashrc中)。要做到这一点,请使用任何类型的编辑器,尽管在终端中执行它更简单:

  1. %GT; emacs .profile
  2. [来自w / in emacs类型:] source ~/.bashrc
  3. [来自w / emacs类型:] Ctrl + x Ctrl + s(保存文件)
  4. [来自w / emacs类型:] Ctrl + x Ctrl + c(关闭emacs)
  5. %GT; emacs .bashrc
  6. [从w /在emacs中键入/粘贴所有bash命令,保存并退出]
  7. 下次退出并重新加载终端时,它应该加载所有bash首选项。为了更好地衡量,将命令分成有用的文件名通常是个好主意。例如,在〜/ .bashrc中,您应该有一个source ~/.bash_aliases并将所有别名命令放在〜/ .bash_aliases中。

答案 6 :(得分:18)

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

setenv FOO barbaz

此文件在登录时由launchd读取。您可以使用以下命令将“动态”变量添加到正在运行的launchd中:

launchctl setenv FOO barbaz`

实际上,.launchd.cond只包含launchctl命令。

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

如果您碰巧尝试以这种方式设置LANG或LC_变量,而您恰好使用iTerm2,请确保禁用“配置文件”的“终端”选项卡下的“自动设置区域设置变量”设置使用。这似乎覆盖了launchd的环境变量,在我的情况下,设置了一个损坏的LC_CTYPE导致远程服务器上的问题(已经传递了变量)。

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

答案 7 :(得分:14)

在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。

答案 8 :(得分:11)

将路径变量添加到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

答案 9 :(得分:7)

打开终端:

vi ~/.bash_profile

将更改应用于系统(无需重启计算机):

source ~/.bash_profile

(也适用于macOS Sierra 10.12.1)

答案 10 :(得分:5)

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

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

  2. 使用文本编辑器(或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>
      ...
    
  3. 使用

    重新加载应用的参数
    /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.fra‌​mework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app
    
  4. 重启Eclipse

答案 11 :(得分:5)

让我以非常冗余的方式从我的个人例子中说明你。

  1. 首先安装JDK后,确保已安装JDK。 enter image description here
  2. 有时,与Windows不同,macOS或Linux会自动为您设置环境变量。但事实并非如此。所以让我们检查一下。 enter image description here 如果未设置环境变量,echo $ JAVA_HOME之后的行将为空。在你的情况下它必须是空的。

  3. 现在我们需要检查是否有bash_profile文件。 enter image description here 你看到我的情况下我们已经有了bash_profile。如果不是,我们必须创建一个bash_profile文件。

  4. 创建一个bash_profile文件。 enter image description here

  5. 再次检查以确保存在bash_profile文件。 enter image description here

  6. 现在让我们打开bash_profile文件。 macOS使用它的默认TextEdit程序打开它。 enter image description here

  7. 这是保存环境变量的文件。如果您已打开新的bash_profile文件,则该文件必须为空。在我的例子中,它已经设置为python编程语言和Anaconda发行版。现在,我需要为Java添加环境变量,这只是添加第一行。你必须输入第一行VERBATIM。只是第一行。保存并关闭TextEdit。然后关闭终端。 enter image description here

  8. 再次打开终端。让我们检查环境变量是否已设置。 enter image description here

答案 12 :(得分:4)

我采取了白痴路线。 将这些添加到/ 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

答案 13 :(得分:1)

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

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

GPU_DUMP_DEVICE_KERNEL为3

GPU_DUMP_TRK_ENVPLIST为(null)

GPU_DUMP_TRK_APPPLIST为(null)

GPU_DUMP_TRK_DOTPROFILE是(null)

GPU_DUMP_TRK_RUNSCRIPT是(null)

GPU_DUMP_TRK_SCHARGS为1

GPU_DUMP_TRK_PUTENV为1

另一方面,如果我进入终端并说“设置”,它似乎唯一得到的是来自.profile的那个(我原本以为它也会选择environment.plist,并且我确信有一次我在终端看到了第二个示踪器envar,所以从那以后可能会出现问题。漫长的一天....)

答案 14 :(得分:0)

第1步:打开~/.bash_profile

现在打开文本编辑器:

第二步:变量名应为大写字母。在此示例中,变量为NODE_ENV

第3步:export NODE_ENV=development

保存并关闭。

重新启动系统。

完成。

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

echo $NODE_ENV 

答案 15 :(得分:0)

建议在设置任何环境变量之前,通过以下命令检查默认接线端外壳

$ echo $SHELL
/bin/zsh

如果像我的情况那样,默认终端为 / bin / zsh (Z Shell)(个人更喜欢Z Shell),则应在〜/ .zshenv < / strong>文件,其内容如下(在此示例中,设置 JAVA_HOME 环境变量,但对其他变量也是如此)

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

类似地,以上未提及的任何其他终端类型,都应在其各自的终端环境文件中设置环境变量。