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

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

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

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

请注意,我也有Lion,因为你在谷歌上得到的许多答案似乎已经过时了…

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

892135 次浏览

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

~/.bash_profile

小牛队更新

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

只限狮子和山狮

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

~/.MacOSX/environment.plist

如果你改变你的环境。plist文件,那么OS X windows应用程序,包括终端应用程序,将设置这些环境变量。您在.bash_profile中设置的任何环境变量只会影响您的bash shell。

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

听起来你想要的是改变环境。Plist文件,而不是.bash_profile。

最后一件事,如果你找那些文件,我想你是找不到的。如果我没记错的话,在我最初安装Lion时并没有。

这里有一些创建plist文件的说明。

  1. 打开Xcode
  2. Select File -> New -> New File…
  3. 在Mac OS X下选择“资源”
  4. 选择一个plist文件
  5. 按照剩下的提示操作

要编辑该文件,可以通过Control-click获得菜单并选择Add Row。然后可以添加键值对。对于环境变量,键是环境变量名,值是该环境变量的实际值。

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

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

现在,添加环境变量相对简单,在概念上与窗口非常相似。在你的.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应用程序中添加环境变量,这通常是不必要的,我想听到更多关于你正在具体尝试做什么,以便更好地给你一个答案。

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

setenv FOO barbaz

这个文件在登录时由launchd读取。你可以添加一个变量'on the fly'到运行的launchd,使用:

launchctl setenv FOO barbaz`

事实上,.launchd.cond仅仅包含launchctl命令。

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

如果你碰巧试图以这种方式设置LANG或LC_变量,并且你碰巧使用的是iTerm2,请确保你禁用了你正在使用的概要文件的终端选项卡下的“自动设置区域变量”设置。这似乎覆盖了launchd的环境变量,在我的情况下,设置了一个坏的LC_CTYPE导致远程服务器上的问题(这被传递了变量)。

(环境。plist似乎仍然工作在我的狮子虽然。您可以使用RCenvironment首选项窗格来维护文件,而不是手动编辑它或所需的Xcode。狮子似乎仍然工作,虽然它的最后一次更新是从雪豹时代。这是我个人最喜欢的方法。)

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

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

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

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

顺便说一句,OS 10.7的干净安装。x Lion没有我能找到的environment.plist,所以它可能工作,但也可能被弃用。

简化的解释

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

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

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

它的含义

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

  1. %比;emacs . profile
  2. [from w/in emacs type:] source ~/.bashrc
  3. [from w/in emacs type:] Ctrl + x Ctrl + s(保存文件)
  4. [from w/in emacs type:] Ctrl + x Ctrl + c(关闭emacs)
  5. %比;emacs . bashrc
  6. [从w/in emacs输入/粘贴所有bash命令,保存并退出]

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

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

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

由于我自己的探索,我现在知道如何用8种不同的方法中的7种设置环境变量。我试图让一个envar通过我在Xcode下开发的应用程序。我使用这些不同的方法设置“跟踪器”envars,以告诉我哪些方法将其纳入我的应用程序范围。从下面,你可以看到在Xcode中编辑“scheme”来添加参数是有效的,就像“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(我本以为它会捡到环境。plist也是,而且我确信我曾经在终端中看到第二个跟踪程序envar,所以从那以后可能有什么东西不稳定了。漫长的一天……)

echo $PATH

它输出当前路径值

然后执行vim ~/.bash_profile并写入

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

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

然后做

source ~/.bash_profile

这将执行它并添加路径

然后再次检查

echo $PATH

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

这里有一个简单的解决方案,无需使用bash。在我的例子中,它是让gradle工作(为Android Studio)。

顺便说一句,这些步骤涉及OSX (Mountain Lion 10.8.5)

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

    sudo nano /etc/paths (vim = sudo vim /etc/paths)

    < img src = " https://i.stack.imgur.com/JLojG.png " alt =“纳米”> < / p >

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

    # EYZ0 < / p >

您应该看到新路径被追加到path的末尾

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

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

我希望这能帮助到其他人

在Mac OS上设置PATH环境变量

打开终端程序(默认在应用程序/实用程序文件夹中)。

.执行以下命令
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。

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

  1. 进入/Applications/eclipse/ eclipse。< / app /内容强>文件夹中

  2. < p >编辑信息。plist文件文本编辑器(或XCode),添加LSEnvironment字典的环境变量完整路径。注意,它还包括/usr/bin etc:

    <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. Reload parameters for app with

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

我选择了白痴路线。 将这些添加到/etc/profile

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

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

/etc$ cat /etc/environments.d

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

打开终端:

vi ~/.bash_profile

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

source ~/.bash_profile

(也适用于macOS Sierra 10.12.1)

# EYZ0

  1. 安装JDK后,请确保JDK已经安装。 李# EYZ0 < / > 有时macOS或Linux会自动为你设置环境变量,不像Windows。但情况并非总是如此。我们来检查一下。 enter image description here 如果没有设置环境变量,echo $JAVA_HOME后面的行将为空。你的箱子里一定是空的。李< / p > < / > 现在我们需要检查是否有bash_profile文件。 enter image description here 您可以看到,在我的示例中,我们已经有bash_profile。如果没有,我们必须创建一个bash_profile文件。李< / p > < / >
  2. 创建bash_profile文件。 李# EYZ0 < / p > < / >

  3. 再次检查,确保bash_profile文件存在。 李# EYZ0 < / p > < / > 现在让我们打开bash_profile文件。macOS使用默认的TextEdit程序打开它。 李# EYZ0 < / p > < / >

  4. 保存环境变量的文件。如果您打开了一个新的bash_profile文件,它必须为空。在我的例子中,它已经为python编程语言和Anaconda发行版设置了。现在,我需要为Java添加环境变量,这只是添加的第一行。你必须一字不差地打第一行。只看第一行。保存并关闭TextEdit。然后关闭终端。 李# EYZ0 < / p > < / >

  5. 重新打开终端。让我们检查是否设置了环境变量。 李# EYZ0 < / p > < / >

步骤1:打开~/.bash_profile

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

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

步骤3:# EYZ0

保存并关闭。

重新启动系统。

完成了。

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

echo $NODE_ENV

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

$ echo $SHELL
/bin/zsh

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

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

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