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


532

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

因此,有人可以向以前的Windows用户耐心地解释一下吗(拼命想更加熟悉愉快的,如果最初有些令人困惑的OS X世界)如何逐步做到这一点?

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

请注意,我也有Lion,因为您对Googling的许多回答似乎对Lion来说已经过时了...

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


如果您尝试从诸如spring之类的应用程序中读取答案,那么所有答案都将无效。
Mehraj Malik

Answers:


403

首先,要认识到OS X的一件事是它基于Unix。这是.bash_profile的来源。在OS X中启动Terminal应用程序时,默认情况下会获得bash shell。bash shell来自Unix,并且在加载时运行.bash_profile脚本。您可以为用户修改此脚本以更改设置。该文件位于:

~/.bash_profile

小牛更新

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

仅限狮子和山狮

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

~/.MacOSX/environment.plist

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

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

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

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

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

  1. 开启Xcode
  2. 选择文件->新建->新建文件...
  3. 在Mac OS X下,选择资源
  4. 选择一个plist文件
  5. 遵循其余提示

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

创建plist文件后,您可以随时使用Xcode对其进行修改。


好,谢谢。我想我已经知道波浪号表示我所谓的主文件夹,对吗(在我的情况下是/ Users / Anders)?因此,如果它们不存在,我应该使用您提到的名称创建一个新的空文本文件(是否可以创建以点开头的文件?)?然后在这些文件中添加什么来设置环境变量?例如,我需要添加一个变量AHF_OPT,该变量应指向ant脚本所需的文件夹,如何在这两个文件中添加该变量?
安德斯

1
请尝试两件事:首先,您粘贴的字符串在“ .dtd>”之后是否有不正确的分号?也许是复制和粘贴错误,但是我必须将其删除才能让Xcode读取文件。其次,您可能需要注销然后重新登录才能生效。
David V

7
了解这也很有用~/.bashrc~/.bashrc每次打开新的非登录bash shell(例如xterm / aterm)时,该文件都会运行,并且~/.bash_profile仅在登录shell(即首次登录系统)时运行。
DanSkeel

1
developer.apple.com/library/mac/#qa/qa1067/_index.html上找到了有关添加环境的很好的清晰说明。
并最终

1
很好的答案,但尴尬的短语是“ OS X Windows应用程序”。这比将X11称为“ X Windows”还要糟糕。最好称其为Aqua或仅称为“ .app应用程序”。
SigmaX

222

您的.profile.bash_profile仅仅是存在于“主”文件夹中的文件。如果打开Finder窗口并在“收藏夹”窗格中单击您的帐户名,则不会看到它们。如果打开“终端”窗口并键入ls以列出文件,则仍然看不到它们。但是,您可以通过ls -a在终端中使用找到它们。或者,如果您打开喜欢的文本编辑器(因为OS X附带了TextEdit),并执行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应用程序中,通常这不是必需的,并且我想了解更多有关您具体想做的事情,以更好地为您提供答案。


2
谢谢,不过我对最后一部分不太了解,我要么必须打开终端窗口进行设置,要么键入.profile?但是我不必打开终端窗口来键入.profile吗?如果仅通过打开“终端”窗口来自动设置它们,那为什么我需要键入...?当我打开一个时,它们会被永久设置吗?我可能误解了您,因为我的问题对我来说也没有意义……
Anders

4
如果在更改个人资料之前打开了“终端”窗口,则这些更改将不会反映在现有终端的环境中。您的快速解决方案是只打开一个新的终端窗口。就这样。每个新窗口都将在.profile中设置所有内容。总是。修复已经打开的旧窗口的方法是键入“ .profile” 2个句点,其中两个空格。“ set”命令用于设置环境变量,这些环境变量将在您结束设置它们的会话时终止。使用不带参数的“ set”列出当前设置的变量。
tokkov 2011年

1
啊,我看到了我造成的混乱。如果没有打开终端窗口,则每个新窗口都会在打开.profile时加载,而您无需执行任何操作。另一方面,如果您已在终端窗口中编辑了.profile或先前已打开终端窗口并希望对其进行更改,那么您只需键入. .profile即可加载它们。
tokkov 2011年

2
我不能使它工作。我在/ Users / Anders下添加了一个.bash_profile文件,其行为export AXF_DIR = / Applications / Antenna / AHFormatterV53,但是ant进程仍然找不到变量AXF_DIR ...此外,我在Terminal中尝试了set命令,并获得了很多信息,但与此变量无关。请注意,我还只是为了确保重启系统,而且还启动了一个新的Terminal窗口...
Anders

2
尝试仅命名它.profile。我只是偷看了我最近买的一台机器,.profile这些天他们似乎在使用,而不是在使用.bash_profile
tokkov

77

以下是有关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。

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

顺便说一句,全新安装的OS 10.7.x Lion没有environment.plist我可以找到的安装程序,因此它虽然可以工作,但也可能不建议使用。


1
是的,非常感谢!这比简单的.profile要复杂得多。
Felixyz

2
如果您使用paths.d方式,并且您的路径中包含包含空格的文件夹,则不要对其进行转义。如果您尝试逃避它们(我认为这是一种常见的做法?),它将不起作用(至少对我而言)。我在这里阅读:sweeting.org/mark/blog/2008/05/26/…(搜索“空格”)。希望这对其他人有帮助!
Michael Trouw 2012年

1
@MichaelTrouw您的评论帮助了我一吨!我正在为这些空间添加转义符,但这不是必需的!我使用Mac OS 10.9.2
kpsfoo 2014年

@jon,有paths.d什么不同paths?另外,前者会否覆盖后者?
Pacerier's

53
echo $PATH

打印当前路径值

然后vim ~/.bash_profile

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

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

然后做

source ~/.bash_profile

这将执行它并添加路径

然后再次检查

echo $PATH

2
“ vim”命令应为vim〜/ .bash_profile,我尝试编辑该帖子,但SO告诉我编辑必须为6个字符:/
Jason Polites

31

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

这是一个简单的解决方案,无需弄乱bash。就我而言,它开始gradle起作用了Android Studio

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

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

    sudo nano /etc/paths(或sudo vim /etc/paths对于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个小时的尝试来理解并完成出口工作之后,我尝试了一下,这项工作奏效了。缺少一个步骤。我将其添加。
2014年

@ 1.21gigawatts啊,太好了,很高兴能为您提供帮助,感谢您
所做

1
更新:此方法有效,但是在编辑后必须重新启动系统。
Anant Simran Singh'1

完美的解决方案!
Jayant Varshney

MacOS 10.12.X的完美选择
Camille

23

简化说明

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

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

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

这是什么意思

您必须创建文件以设置默认的bash命令(通常在〜/ .bashrc中)。为此,可以使用任何类型的编辑器,尽管在终端中进行编辑更简单:

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

下次退出并重新加载终端时,它将加载所有bash首选项。出于良好的考虑,通常最好将命令分成有用的文件名。例如,在〜/ .bashrc中,您应该有一个source ~/.bash_aliases并将所有别名命令放在〜/ .bash_aliases中。


他们为什么将其删除?
Pacerier's

@Pacerier我不确定他们是否将其删除,但是如果不进行自定义,则不需要这些文件。问题是对于终端/外壳,OSX或BSD的新手来说,这些文件并不明显,因此更难于学习。
vol7ron

那么他们用什么代替了它呢?
Pacerier's

它们是可选的,因此他们没有用任何东西替代它。这是一个RC文件
vol7ron

18

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

setenv FOO barbaz

在登录时通过启动读取该文件。您可以使用以下命令“即时”向正在运行的启动添加变量:

launchctl setenv FOO barbaz`

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

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

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

(但是,environment.plist似乎仍然可以在我的Lion上运行。您可以使用RCenvironment首选项窗格来维护文件,而无需手动编辑文件或所需的Xcode。仍然可以在Lion上运行,尽管它的最新更新来自Snow Leopard。时代。使其成为我个人偏爱的方法。)


到目前为止,最简单的答案。请注意,您需要完全关闭终端应用程序,然后重新打开它才能使所有更改生效-不仅仅是关闭单个终端窗口。
Timmmm 2013年

1
这个答案简直太简单了,无法用于OP。创建方式如何?在哪里创建?
HenryRootTwo 2014年

15

在Mac OS上设置PATH环境变量

打开终端程序(默认在“应用程序/实用程序”文件夹中)。运行以下命令

touch ~/.bash_profile; open ~/.bash_profile

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

以ANDROID SDK为例:

您需要将路径添加到Android SDK platform-tools和tools目录。在我的示例中,我将使用“ / 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。


谢谢。不知道为什么,但是只有这个解决方案对我有用,而对上面的解决方案不起作用。
2015年

如您所说,我添加了环境变量,但是我无法在xcode中使用它,您有想法吗?我需要在标题搜索路径中使用它。提前致谢。
Yucel Bayram

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


1
值得注意的是,您需要从主目录的根目录运行它。通过cd不带任何参数或的发布来确保那是您的所在cd ~/
伊夫史密斯2012年

3
也无需重启外壳。使用source .bash_profile
伊夫史密斯2012年

我喜欢这种方法,因为它很短。但这似乎不起作用。我做到了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。
kasavbere 2012年

另外,如果我以root身份执行ech $ PATH(即sudo su),则会得到/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/XAMPP/xamppfiles/bin。当我不扎根时,我会得到/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
kasavbere 2012年

$PATH变量是特定于用户的(root是用户)。
ephsmith 2012年

7

打开终端:

vi ~/.bash_profile

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

source ~/.bash_profile

(也可使用macOS Sierra 10.12.1)


5

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

  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


5

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

  1. 首先,在安装JDK之后,请确保已安装。 在此处输入图片说明
  2. 有时,与Windows不同,macOS或Linux会自动为您设置环境变量。但这并非总是如此。因此,让我们检查一下。 在此处输入图片说明 如果未设置环境变量,则回显$ JAVA_HOME之后的行将为空。您的情况必须为空。

  3. 现在我们需要检查是否有bash_profile文件。 在此处输入图片说明 您看到在我的情况下我们已经有了bash_profile。如果没有,我们必须创建一个bash_profile文件。

  4. 创建一个bash_profile文件。 在此处输入图片说明

  5. 再次检查以确保存在bash_profile文件。 在此处输入图片说明

  6. 现在打开bash_profile文件。macOS使用默认的TextEdit程序将其打开。 在此处输入图片说明

  7. 这是保存环境变量的文件。如果您打开了一个新的bash_profile文件,则该文件必须为空。就我而言,已经为python编程语言和Anaconda发行版设置了。现在,我需要为Java添加环境变量,而这只是添加第一行。您必须输入第一行VERBATIM。仅第一行。保存并关闭TextEdit。然后关闭终端。 在此处输入图片说明

  8. 再次打开终端。让我们检查一下是否设置了环境变量。 在此处输入图片说明


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

1

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

由于我自己的探索,我现在知道如何以8种不同方式中的7种来设置环境变量。我试图让Envar进入我在Xcode下开发的应用程序。我使用这些不同的方法来设置“ tracer” envar,以告诉我哪些方法将其纳入我的应用程序范围。从下面可以看到,在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

...另一方面,如果我进入Terminal并说“ set”,似乎唯一得到的就是.profile中的文件(我本以为它也会拾取environment.plist,所以我可以肯定的是,一旦我在Terminal看到了第二个示踪剂envar,那么从那以后可能有些奇怪了。漫长的一天....)


0

第一步:打开 ~/.bash_profile

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

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

第三步: export NODE_ENV=development

保存并关闭。

重新启动系统。

做完了

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

echo $NODE_ENV 

0

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

$ echo $SHELL
/bin/zsh

如果像我这样,默认终端为/ bin / zsh(Z Shell)(个人首选Z Shell),则应在〜/ .zshenv文件中使用以下内容设置这些环境变量(在此示例中,设置JAVA_HOME环境变量,但同样适用于其他人):

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.