繁体   English   中英

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

[英]Set environment variables on Mac OS X Lion

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

那么有人可以非常耐心地向以前的 Windows 用户解释一下如何一步一步地做到这一点吗?

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

请注意,我也有 Lion,因为您在谷歌上搜索的许多答案对于 Lion 来说似乎已经过时了……

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

首先,要了解 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 配置用于窗口化应用程序。 .bash_profile 仍然受支持,因为它是终端中使用的 bash shell 的一部分。

仅限狮子和山狮

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

~/.MacOSX/environment.plist

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

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

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

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

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

  1. 打开 Xcode
  2. 选择文件 -> 新建 -> 新建文件...
  3. 在 Mac OS X 下选择资源
  4. 选择一个 plist 文件
  5. 按照其余提示操作

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

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

您的.profile.bash_profile只是存在于“home”文件夹中的文件。 如果您打开 Finder 窗口并在“收藏夹”面板中单击您的帐户名称,您将看不到它们。 如果您打开终端窗口并键入ls以列出文件,您仍然看不到它们。 但是,您可以通过在终端中使用ls -a来找到它们。 或者,如果您打开您最喜欢的文本编辑器(比如 TextEdit,因为它是 OS X 附带的)并执行 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 应用程序,这通常是没有必要的,我想了解更多有关您特别想做什么以更好地为您提供答案的信息。

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

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

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

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

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

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 (或sudo vim /etc/paths for vim)

    纳米

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

    echo $PATH

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

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

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

我希望能帮助别人

简化说明

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

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

至多,如果您在终端中做过任何事情,您可能会看到 ~/.bash_history

这是什么意思

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

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

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

对我.launchd.conf用我需要的变量创建一个.launchd.conf

setenv FOO barbaz

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

launchctl setenv FOO barbaz`

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

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

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

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

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

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

打开终端:

vi ~/.bash_profile

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

source ~/.bash_profile

(也适用于 macOS Sierra 10.12.1)

我在 Maveric 上遇到了 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

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

  1. 首先安装JDK后,确保它已安装。 在此处输入图片说明
  2. 与 Windows 不同,有时 macOS 或 Linux 会自动为您设置环境变量。 但情况并非总是如此。 所以让我们检查一下。 在此处输入图片说明 如果未设置环境变量,则紧跟在 echo $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 添加环境变量,它只是添加第一行。 您必须逐字输入第一行。 只是第一行。 保存并关闭 TextEdit。 然后关闭终端。 在此处输入图片说明

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

我走的是白痴路线。 将这些添加到 /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

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

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

...另一方面,如果我进入终端并说“设置”,它似乎唯一得到的是来自 .profile 的那个(我原以为它也会选择 environment.plist,而我当然,有一次我确实在终端中看到了第二个示踪剂 envar,所以从那以后可能有些事情变得不稳定了。漫长的一天......)

Step1:打开~/.bash_profile

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

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

Step3: export NODE_ENV=development

保存并关闭。

重新启动系统。

完毕。

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

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 文件中设置环境变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM