关于macos:在Mac OS X Lion上设置环境变量

Set environment variables on Mac OS X Lion

当有人说"编辑你的.plist文件"或"你的.profile"或".bash_profile"等时,我很困惑。我不知道这些文件在哪里,如果必须这样做,如何创建它们,等等,也不知道为什么有这么多不同的文件(为什么?他们做不同的事情吗?)

那么,有没有人能耐心地向以前的Windows用户解释一下如何一步一步地做到这一点呢?

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

请注意,我也有狮子,因为你得到的许多答案谷歌似乎是过时的狮子…

还要注意,我几乎没有使用终端的经验。我很愿意学习,但请给新手解释一下…


首先,要认识到的一点是,OSX是建立在Unix上的。这就是.bash_配置文件的来源。在OSX中启动终端应用程序时,默认情况下会得到一个bash shell。bash shell来自Unix,加载时运行.bash_概要文件脚本。您可以修改此脚本以供用户更改设置。此文件位于:

1
~/.bash_profile

Mavericks的更新

OS X Mavericks不使用environment.plist-至少不用于OS X Windows应用程序。您可以为窗口应用程序使用启动配置。仍然支持.bash_概要文件,因为它是终端中使用的bash shell的一部分。

只有狮子和山狮

OS X窗口应用程序从environment.plist文件接收环境变量。这很可能就是您所说的".plist"文件。此文件位于:

1
~/.MacOSX/environment.plist

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

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

听起来您想要的是更改environment.plist文件,而不是.bash_配置文件。

最后一件事,如果你找那些文件,我想你找不到。如果我没记错的话,它们不是我最初安装的狮子。

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

  • 打开XCODE
  • 选择文件->新建->新建文件…
  • 在Mac OS X下选择资源
  • 选择一个plist文件
  • 按照其余提示操作
  • 要编辑文件,可以控制单击以获取菜单并选择"添加行"。然后可以添加一个键值对。对于环境变量,键是环境变量名,值是该环境变量的实际值。

    一旦创建了plist文件,您就可以用xcode打开它,随时修改它。


    您的.profile.bash_profile只是"主"文件夹中的文件。如果您打开一个查找窗口并在"收藏夹"窗格中单击您的帐户名,您将看不到它们。如果打开一个终端窗口并键入ls以列出文件,您仍然看不到它们。但是,您可以通过在终端中使用ls -a找到它们。或者,如果你打开你最喜欢的文本编辑器(比如textedit,因为它附带了OS X),然后执行file->open,然后按commandakbd+shift+.,然后单击你的帐户名(主文件夹),你也会看到它们。如果您没有看到它们,那么可以在您最喜欢的文本编辑器中创建一个。

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

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

    等。

    如果要修改"path"变量,请确保包括已为您设置的系统默认路径:

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

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

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

    至于向GUI应用程序添加环境变量,这通常是不必要的,我希望听到更多关于您具体尝试做什么的信息,以便更好地为您提供答案。


    下面是关于lion OS 10.7.x中的路径变量的更多信息:

    如果需要全局设置路径,系统将按以下顺序生成路径:

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

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


    1
    echo $PATH

    它打印当前路径值

    然后做vim ~/.bash_profile并写

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

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

    然后做

    1
    source ~/.bash_profile

    这将执行它并添加路径

    然后再次检查

    1
    echo $PATH


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

    这是一个简单的解决方案,不必与bash混淆。在我的例子中,它让gradle工作(为Android Studio)。

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

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

      sudo nano /etc/paths(或用于VIM的sudo vim /etc/paths)

      nano

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

      echo $PATH

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

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

    http://architectryan.com/2012/10/02/add-to-the-path-on-mac-os-x-mount-lion/.uked3rxpp3q

    我希望能帮助别人


    简单解释

    这个帖子/问题有点过时,所以我将为OSXLion用户回答一个简化版本。默认情况下,osx lion没有以下任何文件:

    • BASHC
    • ~/巴什曲线
    • ~/轮廓

    最多,如果你在终端上做过什么,你可能会看到~/.bash_的历史。

    这意味着什么

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

  • %>Emacs.配置文件
  • [来自w/in Emacs类型:]source ~/.bashrc
  • [来自w/in emacs类型:]Ctrl + x Ctrl + s(保存文件)
  • [来自w/in Emacs类型:]Ctrl + x Ctrl + c(关闭Emacs)
  • %>Emacs.bashrc(Emacs.bashrc)
  • [从w/在emacs中键入/粘贴所有bash命令、保存和退出]
  • 下次您退出并重新加载终端时,它应该加载您的所有bash首选项。为了更好地度量,最好将命令分为有用的文件名。例如,在~/.bashrc中,您应该有一个source ~/.bash_aliases,并将所有别名命令放在~/.bash_别名中。


    我的工作是用我需要的变量创建一个.launchd.conf

    1
    setenv FOO barbaz

    此文件在登录时由launchd读取。您可以使用以下方法将变量"即时"添加到正在运行的启动中:

    1
    launchctl setenv FOO barbaz`

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

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

    如果您正试图以这种方式设置lang或lc_u变量,而您正好使用iterm2,请确保在您使用的配置文件的"终端"选项卡下禁用"自动设置区域设置变量"设置。这似乎覆盖了launchd的环境变量,在我的例子中,设置了一个断开的lc类型,从而在远程服务器上引起问题(它传递了变量)。

    (然而,environment.plist似乎仍在研究我的狮子。您可以使用rcenvironment首选项窗格来维护文件,而不是手动编辑它或所需的xcode。尽管最后一次更新来自雪豹时代,但它似乎仍在研究狮子。这是我个人喜欢的方法。)


    在Mac OS上设置路径环境变量

    打开终端程序(默认情况下,它在applications/utilites文件夹中)。运行以下命令

    1
    touch ~/.bash_profile; open ~/.bash_profile

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

    以Android SDK为例:

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

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

    保存文件并退出文本编辑器。执行.bash_配置文件以更新路径。

    1
    source ~/.bash_profile

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


    向OS X LION添加路径变量

    这是非常直截了当的,在终点站为我工作:

    1
    2
    $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


    开放终端:

    1
    vi ~/.bash_profile

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

    1
    source ~/.bash_profile

    (也与Macos Sierra合作10.12.1)


    让我用一种非常冗长的方式从我的个人例子中向您说明。

  • 首先,在安装JDK之后,确保它已安装。enter image description here
  • 有时MacOS或Linux会自动为您设置不同于Windows的环境变量。但情况并非总是如此。我们来检查一下。enter image description here如果未设置环境变量,echo$java_home后面的行将为空。你的箱子里一定是空的。

  • 现在我们需要检查是否有bash_概要文件。enter image description here你在我的案例中看到了,我们已经有了bash_的简介。如果没有,我们必须创建一个bash_概要文件。

  • 创建bash_配置文件。enter image description here

  • 再次检查以确保bash_配置文件存在。enter image description here

  • 现在让我们打开bash_概要文件。MacOS使用它的默认文本编辑程序打开它。enter image description here

  • 这是保存环境变量的文件。如果您打开了一个新的bash_概要文件,它必须是空的。在我的例子中,它已经为python编程语言和anaconda发行版设置了。现在,我需要为Java添加环境变量,它只是添加第一行。必须逐字键入第一行。只是第一行。保存并关闭文本编辑。然后关闭终端。enter image description here

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


  • 我在Maverics上遇到过Eclipse(以GUI开始,而不是从脚本开始)的问题,它没有采用自定义路径。我试过上面提到的所有方法都没有用。最后,我根据这里的提示找到了最简单的工作答案:

  • 转到/applications/eclipse/eclipse.app/contents文件夹

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <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>
      ...
  • 重新加载应用程序的参数

    1
    /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.fra??mework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app
  • 重新启动Eclipse


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

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

    创建了一个文件夹/etc/环境在其中创建一个名为"Oracle"或"Whatever"的文件,并将我需要的全局设置添加到其中。

    /等$cat/etc/environments.d/oracle

    1
    2
    3
    4
    5
    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

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

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

    GPU转储设备内核为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,而且我确信一旦我在终端中看到第二个跟踪器envar,那么从那时起可能有什么东西变得不稳定了。漫长的一天……


    步骤1:打开EDOCX1[0]

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

    步骤2:变量名应使用大写。在这个例子中,变量是NODE_ENV

    步骤3:export NODE_ENV=development

    保存并关闭。

    重新启动系统。

    完成。

    检查env变量:打开终端和类型

    1
    echo $NODE_ENV