Mac OS X 中的环境变量

2023-12-21

更新:以下链接没有完整的答案。必须在两个地方设置路径或变量(一个用于 GUI,一个用于 shell)是蹩脚的。

不重复: 在 OS X 中设置环境变量? https://stackoverflow.com/questions/135688/setting-environment-variables-in-os-x


来自 Windows 背景,设置和修改环境变量非常容易(只需转到“系统属性”>“高级”>“环境变量”),但在 Mac OS 10.5 上似乎并不那么简单。大多数参考文献都说我应该更新 /etc/profile 或 ~/.profile。这些相当于系统变量和用户变量吗?例如,我应该在哪里设置我的JAVA_HOME多变的?


EDIT:

我希望能够从终端以及 Eclipse 等应用程序访问该变量。另外,我希望我不必重新启动/注销即可使其生效。


有几个地方可以设置环境变量。

  • ~/.profile:将此用于要在从终端启动的所有程序中设置的变量(请注意,与 Linux 不同,在 Terminal.app 中打开的所有 shell 都是登录 shell)。
  • ~/.bashrc:这是针对非登录 shell 的 shell 调用的。将此用于别名和其他需要在子 shell 中重新定义的内容,而不是用于继承的环境变量。
  • /etc/profile:这是在 ~/.profile 之前加载的,但在其他方面是等效的。当您希望变量应用于计算机上所有用户启动的终端程序(假设他们使用 bash)时,请使用它。
  • ~/.MacOSX/environment.plist:登录时由登录窗口读取。它适用于所有应用程序,包括 GUI 应用程序,但由 Spotlight 在 10.5(不是 10.6)中启动的应用程序除外。它要求您注销并再次登录才能使更改生效。从 OS X 10.8 起不再支持此文件。
  • 你的用户的launchd实例:这适用于由用户、GUI 和 CLI 启动的所有程序。您可以随时使用以下命令应用更改setenv命令输入launchctl. 理论上,你应该能够把setenv命令在~/.launchd.conf, and launchd当用户登录时会自动读取它们,但实际上从未实现对此文件的支持。相反,您可以使用另一种机制在登录时执行脚本,并让该脚本调用launchctl设置launchd环境。
  • /etc/launchd.conf:当系统启动和用户登录时,launchd 会读取此信息。它们会影响系统上的每个进程,因为 launchd 是根进程。要将更改应用于正在运行的 root launchd,您可以将命令通过管道传输到sudo launchctl.

需要理解的基本内容是:

  • 环境变量在子进程被分叉时由子进程继承。
  • 根进程是一个 launchd 实例,每个用户会话还有一个单独的 launchd 实例。
  • launchd 允许您使用以下命令更改其当前环境变量launchctl;然后,更新后的变量将被它派生的所有新进程继承。

使用 launchd 设置环境变量的示例:

echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl

现在,启动使用该变量的 GUI 应用程序,瞧!

为了解决这个问题~/.launchd.conf不起作用,您可以将以下脚本放入~/Library/LaunchAgents/local.launchd.conf.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>local.launchd.conf</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl &lt; ~/.launchd.conf</string>    
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

然后你可以把setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE inside ~/.launchd.conf,并且会在每次登录时执行。

请注意,当以这种方式将命令列表传输到 launchctl 时,您将无法使用包含空格的值设置环境变量。如果需要这样做,可以调用 launchctl,如下所示:launchctl setenv MYVARIABLE "QUOTE THE STRING".

另请注意,在登录时运行的其他程序可能会在启动代理之前执行,因此可能看不到它设置的环境变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac OS X 中的环境变量 的相关文章

  • macOS:以编程方式检查进程是否作为 launchDaemon 或 launchAgent 运行或从命令行运行

    我想了解我的进程运行的上下文 我想区分以下情况 它作为持久计划任务运行 launchDaemon launchAgent 它被称为按需并由 launchd 使用创建open命令行或双击 它是直接从命令行终端调用的 即 gt bin myPr
  • 如何在最新的 OS X 上安装多个版本的 Python 并并行使用它们?

    我想在 OS X 10 11 上使用多个 Python 版本运行测试 包括 Python 2 6 Python 2 7 默认 已解决 Python 3 4 Python 3 5 通过brew 安装 运行良好 Conda Python 3 5
  • std::istringstream >> 使奇怪的行为加倍

    下面的代码打印0在 mac osx 上使用 clang 其他地方都会打印5 clang https ideone com mVgpzS gcc https ideone com oZ0hy6 include
  • 在 MacOS 上重新启动终端而不关闭

    如何在不关闭窗口的情况下重新启动当前的 MacOS 终端会话 在Linux中我使用exec bash但在这种环境下它不起作用 我对 bash profile 提示 别名等 我想在不关闭它并再次打开的情况下查看 只需输入命令 exec bas
  • 如何在 mac os 10.6 上安装brew或homebrew

    我已经尝试过多次了 谁能告诉我具体的详细步骤吗 我的Mac操作系统是10 6 8 它抱怨一些丢失的包裹 使用它在 Mac OSX 10 6 8 上安装 ruby e curl fsSL https raw githubusercontent
  • Xcode:无法检查应用程序包

    我正在运行 Xcode 6 和 iOS 8 GM 每当我运行我的应用程序时 我都会从 Xcode 收到此消息 无法检查应用程序包 这样我就可以运行和构建 我会收到消息 我再次运行并构建 一切都按预期运行 这是我的设备 然后它会冲洗并重复 每
  • 从内存加载动态库

    是否可以从内存而不是从 mac gcc 上的文件系统加载库 在 Windows 中 我使用 MemoryModule 但它显然不跨平台兼容 首先 要做到这一点 我建议您阅读OS X ABI 动态加载器参考 https developer a
  • 使用 MTL/Boost 库 Mac 终端 C++

    准确地说 我正在尝试运行这个优秀的项目 https github com ppwwyyxx panorama https github com ppwwyyxx panorama 我使用的是现代 Mac 问题是我似乎无法让我的计算机正确包含
  • Apache PHP/OSX Mavericks: - 无法打开流:打开的文件太多

    我最近升级到 OSX Mavericks 从那时起 我开始在我的开发计算机上收到上述错误 代码中没有明显的问题 它是自动生成的Yii http www yiiframework com 示例应用程序 Mavericks 升级过程中发生的事情
  • tmux 标题字符串不执行 shell 命令

    我的中有以下几行 tmux conf set option g set titles on set option g set titles string whoami H PWD S W F I P 这在过去是有效的 但升级到 2 0 后
  • gem install rmagick 在 OS X El Capitan 上失败

    几天前我升级到 El Capitan 并运行了 brew update brew upgrade 它更新了 imagemagick 导致 ruby 的 rmagick gem 停止工作 我想没问题 我就跑 gem install rmagi
  • CoreMediaIO,错误更新的属性 kCMIODevicePropertyDeviceIsRunningSomewhere

    当某些进程开始使用相机时 我需要接收一个事件 我通过 CMIOObjectGetPropertyData 完成此操作 但它不能正常工作 只有第一次访问时才是正确的值 我还尝试使用 CMIOObjectAddPropertyListenerB
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • Mac OS X 下的 JavaFX:系统菜单和模态窗口

    我目前面临 Mac OS X 下的 JavaFX 菜单和模式对话框的问题 我正在使用该方法 MenuBar setUseSystemMenuBar true 为了将系统菜单栏用于我的应用程序菜单 这工作正常 但如果模式对话框打开 菜单不会被
  • 一个好的8086模拟器[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 mac 有没有 8086 模拟器 如果是 哪个是最好的 除非您需要真正的原始 8086 带有自定义操作系统 否则您应该尝试 DosBox
  • 在 Cocoa OS X AVPlayer 中播放 HLS (m3u8) - Swift

    基本上我正在尝试在 Cocoa Swift 中使用 AVPlayer 播放 m3u8 HLS Live Stream 我对这门语言比较陌生 所以基本上掌握了一些示例代码 http qiita com ono matope items 23d
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的

随机推荐

  • HTML5 + CSS3 100% 高度带边距

    给定以下 HTML 布局
  • 列表中的重复元素[重复]

    这个问题在这里已经有答案了 我有一个list在Python中 l a c e b 我想将每个元素复制到紧邻原始元素的位置 ll a a c c e e b b 应保留元素的顺序 gt gt gt l a c e b gt gt gt x f
  • 无法再发送推文:插件 com.apple.share.Twitter.post 无效

    我的应用程序使用 SLComposeViewController 发布到 Twitter 这种方法持续了几个月 然后在大约一周前突然停止了 Twitter 共享视图允许我按 发布 并且以下代码仍然到达 行 twitterComposeVie
  • 发布到 Azure 时未加载捆绑的 CSS

    从 Microsoft 提供的默认 ASP Net Web 表单模板开始 我添加了几个 CSS 文件 将其捆绑并将其添加到 Site Master 事情在本地可以工作 但在 Azure 上发布时就不行了 基于这些链接 link 1 http
  • OSX 中的侧边栏图标图像名称

    该图标是否包含在 Cocoa API 中 图标名称是什么 我读了 HIGH 但找不到参考资料 https developer apple com library mac documentation UserExperience Concep
  • 为什么我无法在 Silverlight 4 中绑定 DataGridTemplateColumn 的可见性?

    似乎仍然无法在 Silverlight 4 中绑定 DataGridTemplateColumn 的可见性属性 我做了一些谷歌搜索 似乎有一些帖子建议这样做事实上它不是 DependencyObject http forums silver
  • SwiftUI 中的免费可扩展列表有什么要求?

    在我的代码中的某个地方 我有一个非常标准的列表 其中包含以下部分 var body some View List ForEach userData groupedBookings group in Section header Text g
  • QRegExpValidator 与 QTextEdit

    QRegExpValidator 可以与 QTextEdit 小部件一起使用吗 我尝试通过 setValidator 实现 并将 qtextedit 设置为父对象 但它不起作用 你应该使用virtual QValidator State Q
  • 如何为官方 nginx Docker 镜像使用自定义 Nginx 配置?

    我有下一个docker compose file nginx build ports 80 80 443 443 links fpm fpm image php fpm ports 9000 9000 The Dockerfile命令列表是
  • 回溯外部化

    目前我有 logback 配置文件 即logback xml这是src main resources 我想设置日志记录级别 但我想在战争之外进行控制 我能想到的一种解决方案是将其外部化在属性文件中 在服务器启动时加载它并替换占位符 有更好的
  • Opengraph W3C 有效吗?

    我想知道 opengraph 标记是否是 W3C 有效的 当我尝试验证它时 出现以下错误 Line 14 Column 17 there is no attribute PROPERTY 如果它无效 会影响我的页面排名和其他搜索引擎算法吗
  • 为什么 UIFont(descriptor:size:) 比 UIFont(name:size:) 慢 200 倍?

    最近我注意到滚动的性能正在减慢 我追踪了这个问题 发现原因是使用了由UIFont 描述符 大小 https developer apple com library ios documentation UIKit Reference UIFo
  • Numpy 通过交错连接数组

    我有 4 个数组 我想将它们连接成一个交错的数组 我该怎么做呢 gt gt gt import numpy as np gt gt gt a np tile 0 5 2 gt gt gt b np tile 1 5 2 gt gt gt c
  • 使用python查找fits文件中像素的物理坐标

    我想从 python 脚本中获取给定像素的物理天空坐标 我想使用 astropy 的 WCS 但我会在 python 中做任何事情 我已经尝试过这两段代码 from astropy io import fits from astropy w
  • 打印数组 LISP 的内容

    为什么这段代码不打印出数组的内容 defun loopfn state loop for x from 0 to 2 do loop for y from 0 to 2 do aref state x y 这里我传递了一个 3x3 矩阵 它
  • 正则表达式匹配开始和结束字符串

    这看起来应该是微不足道的 但我不太擅长正则表达式 而且这对谷歌来说似乎并不容易 我需要一个以字符串 dbo 开头的正则表达式 并以字符串 fn 结尾 就我而言 我不在乎这两个字符串之间有什么字符 只要开头和结尾正确即可 这是为了匹配 SQL
  • 为什么 LIB 文件具有如此两面性的野兽?

    我正在尝试了解 Microsoft Windows 上的 LIB 文件业务 并且我刚刚有了一个发现 我希望它能够消除迄今为止阻止我清楚掌握该问题的困惑 也就是说 LIB 文件并不是其文件扩展名所表明的那种文件 cd C Program Fi
  • 颤动错误:没有名称为“displayLarge”的命名参数

    我正在开发一个应用程序 两天前我在 git 上发布了最后一次更新 此后就没有再碰过代码 现在 我打开 android studio 当我尝试运行它时 它给了我这个错误 我尝试从计算机中删除存储库 然后再次克隆它 但它不起作用 我也尝试过寻找
  • 如何在FMX(火猴)中加载大位图

    我正在尝试创建一个需要加载的漫画查看器JPG像 1000 16000 这样的大尺寸图像 我的应用程序是在 delphi FMX 中 我已经尝试过使用TImage TImageViewer TImageControl但他们都使用TBitmap
  • Mac OS X 中的环境变量

    更新 以下链接没有完整的答案 必须在两个地方设置路径或变量 一个用于 GUI 一个用于 shell 是蹩脚的 不重复 在 OS X 中设置环境变量 https stackoverflow com questions 135688 setti