ChatGPT解决这个技术问题 Extra ChatGPT

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

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

那么有人可以非常耐心地向以前的 Windows 用户解释(迫切希望更加熟悉令人愉快的,如果最初有点令人困惑的 OS X 世界)如何一步一步地做到这一点?

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

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

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

如果您尝试从诸如 spring 之类的应用程序中读取答案,则任何答案都不会起作用。

C
Community

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

仅限狮子和山狮

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

~/.MacOSX/environment.plist

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

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

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

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

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

打开 Xcode 选择 File -> New -> New File... 在 Mac OS X 下选择 Resources 选择一个 plist 文件 按照其余提示操作

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

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


好,谢谢。我想我已经明白波浪号意味着我所谓的主文件夹,对吧(即 /Users/Anders 在我的情况下)?因此,如果它们不存在,我应该使用您提到的名称创建一个新的空文本文件(是否允许我创建一个以点开头的文件?)?然后在这些文件中添加什么来设置环境变量?例如,我需要添加一个变量 AHF_OPT,它应该指向一个 ant 脚本所需的文件夹,如何在这两个文件中添加它?
有两件事要尝试:首先,您粘贴的字符串是否在“.dtd>”之后有一个不正确的分号,也许这是一个复制和粘贴错误,但我必须删除它才能让 Xcode 读取文件。其次,您可能需要注销并重新登录才能生效。
了解 ~/.bashrc 也很有用。 ~/.bashrc 文件在您每次打开新的非登录 bash shell(如 xterm/aterm)时运行,而 ~/.bash_profile 仅在登录 shell 时运行,即当您首次登录系统时。
找到了关于在此处添加 environment.plist developer.apple.com/library/mac/#qa/qa1067/_index.html 的清晰解释。
很好的答案,除了尴尬的短语“OS X windows application”。这比将 X11 称为“X Windows”还要糟糕。最好称它为 Aqua 或只是“.app 应用程序”。
K
Karl Hill

您的 .profile.bash_profile 只是“主”文件夹中的文件。如果您打开 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 应用程序添加环境变量,这通常是没有必要的,我想更多地了解您具体尝试做什么,以便更好地为您提供答案。


谢谢,我不太明白最后一部分,我要么必须打开一个终端窗口来设置它们,要么输入 .profile?但是我不必打开终端窗口来输入 .profile 吗?如果它们只是通过打开终端窗口自动设置,那么我为什么需要输入...?当我打开一个时,它们会被永久设置吗?我可能误解了你,因为即使我的问题对我来说也没有意义......
如果您在更改配置文件之前打开了终端窗口,则这些更改将不会反映在现有终端的环境中。您的快速解决方案是打开一个新的终端窗口。就这样。每个新窗口都将设置 .profile 中的所有内容。总是。修复旧的、已经打开的窗口的方法是键入“..profile” 2 个句点,它们之间有 1 个空格。 “set”命令是设置环境变量,当你结束你设置的会话时会死掉。使用不带参数的“set”会列出当前设置的变量。
啊,我看到了我造成的混乱。如果您没有打开终端窗口,那么每个新窗口都会在打开时加载 .profile,您无需执行任何操作。另一方面,如果您在终端窗口中编辑了 .profile 或之前打开了终端窗口并希望在其中进行更改,那么您只需键入 . .profile 即可加载它们。
我不能让它工作。我在/Users/Anders下添加了一个文件.bash_profile,行export AXF_DIR=/Applications/Antenna/AHFormatterV53,但是ant进程仍然找不到变量AXF_DIR ...另外,我在终端中尝试了set命令,并获得了很多信息,但没有关于这个变量的信息。请注意,为了确定,我还重新启动了系统,并且我还启动了一个新的终端窗口...
尝试将其命名为 .profile。我刚刚看了看我最近买的一台机器,这些天他们似乎在使用 .profile 而不是 .bash_profile
j
jonphipps

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

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

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

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

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


是的,非常感谢!这比简单的 .profile 要复杂一些。
如果您使用paths.d 方式并且您有一个包含包含空格的文件夹的路径,请不要转义它们。如果你试图逃避它们(我认为这是常见的做法?)它不起作用(至少对我来说)。我在这里读到:sweeting.org/mark/blog/2008/05/26/…(搜索“空格”)。希望这对其他人有帮助!
@MichaelTrouw 你的评论帮了我很多忙!我正在为空格添加转义符,但这不是必需的!我在 Mac OS 10.9.2 上
@jon,paths.dpaths 有何不同?另外,前者会覆盖后者吗?
1
1.21 gigawatts
echo $PATH

它打印当前路径值

然后做 vim ~/.bash_profile 并写

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

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

然后做

source ~/.bash_profile

这将执行它并添加路径

然后再次检查

echo $PATH

“vim”命令应该是 vim ~/.bash_profile 我试图编辑帖子但 SO 告诉我编辑必须是 6 个字符:/
为什么不需要在打开终端时运行源代码
w
wired00

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

这是一个简单的解决方案,无需与 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

我希望这可以帮助别人


经过 3 个小时的尝试理解和导出任何工作后,我尝试了这个并且它奏效了。少了一步。我会添加它。
@1.21gigawatts 啊太棒了,很高兴它帮助了你,感谢您的编辑
更新:这可行,但在编辑后必须重新启动系统。
非常适合 MacOS 10.12.X
C
Community

简化说明

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

~/.bashrc

~/.bash_profile

~/.profile

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

这是什么意思

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

%> emacs .profile [from w/in emacs type:] source ~/.bashrc [from w/in emacs type:] Ctrl + x Ctrl + s (保存文件) [from w/in emacs type:] Ctrl + x Ctrl + c (关闭 emacs) %> emacs .bashrc [在 emacs 中输入/粘贴所有 bash 命令,保存并退出]

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


顺便说一句,他们为什么将其删除?
@Pacerier 我不确定他们是否删除了它,但是如果没有自定义,这些文件就没有必要了。问题是对于终端/shell、OSX 或 BSD 的新手来说,这些文件并不明显,因此更难学习。
那么他们用什么代替了它呢?
它们是可选的,所以它们没有用任何东西替换它;这是一个RC文件
G
Gilimanjaro

对我有用的是使用我需要的变量创建一个 .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,尽管它的最后一次更新来自雪豹时代。让它成为我个人首选的方法。)


到目前为止最简单的答案。请注意,您需要完全关闭终端应用程序并重新打开它以使任何更改生效 - 而不仅仅是关闭单个终端窗口。
这个答案过于精简,无法用于 OP。怎么创建?在哪里创作?
更清晰和最新的答案:stackoverflow.com/questions/135688/…
C
Charaf JRA

在 Mac OS 上设置 PATH 环境变量

打开终端程序(默认情况下,它位于您的 Applications/Utilites 文件夹中)。运行以下命令

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。


谢谢。不知道为什么,但只有这个解决方案对我有用,而不是上面的那些。
我按照你说的添加了环境变量,但我不能在 xcode 中使用它,你有什么想法吗?我需要在标题搜索路径中使用它。提前致谢。
C
Community

向 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


值得注意的是,您需要从主目录的根目录运行它。通过发出不带参数的 cdcd ~/ 确保这是您的目标。
也不需要重新启动 shell。使用 source .bash_profile
我喜欢这种方法,因为它很短。但这似乎不起作用。我做了 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。
另外,如果我以 root 身份执行 ech $PATH(即 sudo su),我会得到 /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/XAMPP/xamppfiles/bin。当我不是 root 时,我会得到 /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
$PATH 变量是用户特定的(root 是用户)。
J
James Graham

打开终端:

vi ~/.bash_profile

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

source ~/.bash_profile

(也适用于 macOS Sierra 10.12.1)


C
Community

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

转到 /Applications/eclipse/Eclipse.app/Contents 文件夹使用文本编辑器(或 XCode)编辑 Info.plist 文件,为具有完整路径的环境变量添加 LSEnvironment 字典。请注意,它还包括 /usr/bin 等: LSEnvironment PATH /usr/bin:/bin:/usr/sbin:/ sbin:/dev/android-ndk-r9b CFBundleDisplayName Eclipse ... 使用 /System/Library/Frameworks/CoreServices 重新加载应用程序的参数.framework/Frameworks/LaunchServices.fra‌​mework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app 重启 Eclipse


S
Sumit Pokhrel

让我以非常多余的方式从我的个人例子中说明你。

首先安装JDK后,确保它已安装。与 Windows 不同,有时 macOS 或 Linux 会自动为您设置环境变量。但情况并非总是如此。所以让我们检查一下。如果未设置环境变量,则 echo $JAVA_HOME 之后的行将为空。在你的情况下它必须是空的。现在我们需要检查是否有 bash_profile 文件。你看到在我的例子中我们已经有了 bash_profile。如果没有,我们必须创建一个 bash_profile 文件。创建一个 bash_profile 文件。再次检查以确保 bash_profile 文件存在。现在让我们打开 bash_profile 文件。 macOS 使用其默认的 TextEdit 程序打开它。这是保存环境变量的文件。如果你打开了一个新的 bash_profile 文件,它必须是空的。就我而言,它已经为 python 编程语言和 Anaconda 发行版设置了。现在,我需要为 Java 添加环境变量,它只是添加第一行。您必须逐字输入第一行。只是第一行。保存并关闭 TextEdit。然后关闭终端。再次打开终端。让我们检查一下是否设置了环境变量。


R
Rob in Katy

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

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

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

/etc$ 猫 /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

P
Photovore

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

由于我自己的探索,我现在知道如何以 8 种不同方式中的 7 种设置环境变量。我试图让一个 envar 通过我在 Xcode 下开发的应用程序。我使用这些不同的方法设置“跟踪器”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,所以从那时起某些事情可能变得不稳定。漫长的一天....)


J
Jerry Chong

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

$ echo $SHELL
/bin/zsh

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

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

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


M
Muhammad Omer Aslam

第一步:打开~/.bash_profile

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

Step2:变量名大写。在此示例中,变量为 NODE_ENV

第三步:export NODE_ENV=development

保存并关闭。

重新启动系统。

完毕。

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

echo $NODE_ENV