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文件的一些说明。
要编辑文件,可以控制单击以获取菜单并选择"添加行"。然后可以添加一个键值对。对于环境变量,键是环境变量名,值是该环境变量的实际值。
一旦创建了plist文件,您就可以用xcode打开它,随时修改它。
您的
现在,添加环境变量相对简单,概念上与Windows非常相似。在您的
1 2 | export JAVA_HOME=/Library/Java/Home export JRE_HOME=/Library/Java/Home |
等。
如果要修改"path"变量,请确保包括已为您设置的系统默认路径:
1 | export PATH=$PATH:/path/to/my/stuff |
现在有一个奇怪的部分,您可以打开一个新的终端窗口使新的变量生效,或者您需要键入
您可以使用终端中的"set"命令检查更改是否生效。只需键入
至于向GUI应用程序添加环境变量,这通常是不必要的,我希望听到更多关于您具体尝试做什么的信息,以便更好地为您提供答案。
下面是关于lion OS 10.7.x中的路径变量的更多信息:
如果需要全局设置路径,系统将按以下顺序生成路径:
这些路径和变量是由所有用户和应用程序继承的,因此它们是真正全局的——注销和登录不会重置这些路径——它们是为系统构建的,并且是在任何用户有机会登录之前创建的,因此对这些路径和变量的更改需要重新启动系统才能生效。
顺便说一句,OS 10.7.x Lion的全新安装没有我能找到的
1 | echo $PATH |
它打印当前路径值
然后做
1 | export PATH=$PATH:/new/path/to/be/added |
在这里,您将附加到旧路径,因此保留旧路径并将新路径添加到其中。
然后做
1 | source ~/.bash_profile |
这将执行它并添加路径
然后再次检查
1 | echo $PATH |
不幸的是,这些答案都没有解决我遇到的具体问题。
这是一个简单的解决方案,不必与
顺便说一句,这些步骤与OSX(Mountain Lion 10.8.5)有关。
- 打开终端。
运行以下命令:
sudo nano /etc/paths (或用于VIM的sudo vim /etc/paths )- 转到文件的底部,输入要添加的路径。
- 点击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中)。要做到这一点,请使用任何类型的编辑器,尽管在终端中这样做更简单:
下次您退出并重新加载终端时,它应该加载您的所有bash首选项。为了更好地度量,最好将命令分为有用的文件名。例如,在~/.bashrc中,您应该有一个
我的工作是用我需要的变量创建一个
1 | setenv FOO barbaz |
此文件在登录时由launchd读取。您可以使用以下方法将变量"即时"添加到正在运行的启动中:
1 | launchctl setenv FOO barbaz` |
实际上,
以这种方式设置的变量似乎正确地存在于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)
让我用一种非常冗长的方式从我的个人例子中向您说明。
有时MacOS或Linux会自动为您设置不同于Windows的环境变量。但情况并非总是如此。我们来检查一下。如果未设置环境变量,echo$java_home后面的行将为空。你的箱子里一定是空的。
现在我们需要检查是否有bash_概要文件。你在我的案例中看到了,我们已经有了bash_的简介。如果没有,我们必须创建一个bash_概要文件。
创建bash_配置文件。
再次检查以确保bash_配置文件存在。
现在让我们打开bash_概要文件。MacOS使用它的默认文本编辑程序打开它。
这是保存环境变量的文件。如果您打开了一个新的bash_概要文件,它必须是空的。在我的例子中,它已经为python编程语言和anaconda发行版设置了。现在,我需要为Java添加环境变量,它只是添加第一行。必须逐字键入第一行。只是第一行。保存并关闭文本编辑。然后关闭终端。
再次打开终端。让我们检查是否设置了环境变量。
我在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:变量名应使用大写。在这个例子中,变量是
步骤3:
保存并关闭。
重新启动系统。
完成。
检查env变量:打开终端和类型
1 | echo $NODE_ENV |