Mac OS X 10.9 - 设置永久环境变量

Posted

技术标签:

【中文标题】Mac OS X 10.9 - 设置永久环境变量【英文标题】:Mac OS X 10.9 - setting permanent environment variables 【发布时间】:2014-04-25 12:21:19 【问题描述】:

如何在 Mac OS X 10.9 中设置永久环境变量(即每次启动新终端会话时不需要导出的环境变量)?我找到了许多关于修改我的 .bash_profile.profile 的答案,但是这些选项似乎都不能作为永久解决方案 - 只是暂时的。我要设置的变量是MULE_HOME。我的 bash 个人资料中有以下行:

export MULE_HOME=$(/opt/mule-standalone-3.4.0)

但是,当我启动终端时,我得到以下行(不确定这是否是正常行为?):

-bash: /opt/mule-standalone-3.4.0: is a directory

运行一个简单的env 命令会返回以下内容:

TERM_PROGRAM=Apple_Terminal
SHELL=/bin/bash
TERM=xterm-256color
TMPDIR=/var/folders/fc/68bqp4jj411gynj5qvwhq6z1shs1fy/T/
Apple_PubSub_Socket_Render=/tmp/launch-xKtkql/Render
TERM_PROGRAM_VERSION=326
TERM_SESSION_ID=E97BFE4B-AF85-4933-B252-0883CC085349
USER=dan
SSH_AUTH_SOCK=/tmp/launch-rEmTWW/Listeners
__CF_USER_TEXT_ENCODING=0x730C85DE:0:0
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
__CHECKFIX1436934=1
PWD=/Users/dan
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home
LANG=en_GB.UTF-8
MULE_HOME=
SHLVL=1
HOME=/Users/dan
LOGNAME=danwiseman
_=/usr/bin/env

为了解决这个问题,我目前每次开始新的终端会话时都必须输入export MULE_HOME=/opt/mule-standalone-3.4.0,这虽然不费力,但有点不方便。我在这里做错了什么导致变量仅被临时设置?提前致谢。

【问题讨论】:

【参考方案1】:

我必须运行 source ~/.bashrc 才能在更改 ~/.bashrc 后显示我的更改,我在 Big Sur 上。

【讨论】:

【参考方案2】:
    转到主目录(如果没有)cd ~ 打开 .bash_profile 文件 vi .bash_profile 或者如果不存在则创建 touch ~/.bash_profile 编辑文件export PATH=$PATH:add-your-path-here 并保存并重新启动终端以查看效果。检查echo $PATH 以查看是否添加了路径或检查您安装的软件包的版本。

【讨论】:

【参考方案3】:

Apple 似乎一直在改变如何做到这一点。这一切都与上下文有关。当另一种方法有效时,一种方法不一定有效。我需要它在 IDE 中工作,这里提到的 bash 文件(Linux 风格)都没有做到这一点。与 Windows 和 Linux 相比,GUI 应用程序永久尊重这一点的当前方式非常复杂!

简而言之,您已经将一大堆丑陋的 XML 写入 plist 文件以运行一些 bash。这进入您的“启动代理”目录,即~/Library/LaunchAgents/my.startup.plist。这是关于该主题的另一个 Stack Exchange 线程:

https://apple.stackexchange.com/questions/106355/setting-the-system-wide-path-environment-variable-in-mavericks

这为您提供了完整的复制和粘贴,您可以对其进行调整以设置您的特定变量。

【讨论】:

【参考方案4】:

或者,如果您希望图形应用程序可以看到您的环境变量,也可以将以下命令添加到您的.bash_profile。在 Mac OS X 中,图形应用程序不会继承您的 .bash_profile 配置:

launchctl setenv MYPATH myvar

【讨论】:

【参考方案5】:

刚刚做到这一点非常简单快捷。首先从终端创建一个~/.bash_profile

touch ~/.bash_profile

然后

open -a TextEdit.app ~/.bash_profile

添加

export TOMCAT_HOME=/Library/Tomcat/Home

在 TextEdit 中保存文档,您就完成了。

【讨论】:

【参考方案6】:

删除$(...) 位,它将尝试执行括号内的命令并将$MULE_HOME 设置为它产生的任何内容。在您的情况下,/opt/mule-standalone-3.4.0 不是可执行文件,因此您遇到了错误。

export MULE_HOME=/opt/mule-standalone-3.4.0

并使用~/.bashrc 而不是~/.bash_profile

编辑:似乎意见是您应该在~/.bash_profile 脚​​本中设置环境变量,而不是~/.bashrc 脚本。

【讨论】:

感谢@***foe,这行得通。供参考 - 使用 ~/.bashrc 而不是 ~/.bash_profile 的原因是什么? .bash_profile 只对登录 shell 执行,而.bashrc 对每个新的 shell 实例执行。 @fedorqui 我可能应该使用的术语是“交互式”shell,但是 bash 也执行 .bashrc 用于登录和交互式 shell,其中包含 .bash_profile 中的一行。所以我选择了“实例”。登录 shell 仅在大多数 unices 下登录(从另一个主机使用ssh 或通过控制台)时才会执行,但是在 OSX 下这很复杂,因为 Terminal.app 也将 shell 作为登录 shell 运行。因此在 OSX 下,这两个脚本没有太大区别。 通常,环境变量进入.bash_profile,因为它们只需要在登录时设置一次。所有后代进程都将继承其父进程的值。在 OS X 中,bash 不用作初始登录过程的一部分,Terminal.app(或其他终端仿真器)进程存在于任何预先存在的bash 会话之外,因此每个新窗口(默认情况下)都会处理本身作为一个新的登录会话。 @***foe:OSX 没有默认的 ~/.bash_profile,因此您不能依赖该行的存在(很明显,即使它最初存在,也不能保证它会稍后再去)。使用~/.bash_profile 是可靠的选择。关键是 OSX 不会自动all 交互式 bash 实例提供 ~/.bashrc,一些 OSX 用户可能根本不会使用 ~/.bashrc。如果您仍然想推荐使用它,请更新您的答案以明确说明先决条件:~/.bash_profile 中存在行[ -f ~/.bashrc ] && . ~/.bashrc【参考方案7】:

你可以把你的出口声明放在~/.bashrc

【讨论】:

在 OSX 上,~/.bashrc 不会为 login 外壳执行 - 所有由 Terminal.app 启动的外壳都是;因此,请使用~/.bash_profile

以上是关于Mac OS X 10.9 - 设置永久环境变量的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS X Mojave - 永久设置环境变量

在 Mac OS X 10.9 搭建 Python3 科学计算环境

markdown Ruby on Rails的安装环境(Mac OS X 10.9或更高版本)

Mac OS X 10.9 后无法安装 PIL

gfortran 不适用于 Mac OS X 10.9(小牛)

无法在 Mac OS X 10.9 上安装 Lxml