【问题标题】:Why does is zsh environment variable not present when launching application?为什么启动应用程序时不存在 zsh 环境变量?
【发布时间】:2021-09-22 07:57:54
【问题描述】:

情况:

我需要设置一些环境变量以在程序中访问。如果我打开终端窗口(zsh shell),通过export VARNAME=VARVALUE 设置变量,然后从该终端窗口启动程序(例如open ~/Applications/myApp.app),它就可以工作。

问题

现在我希望在运行应用程序时始终设置环境变量,只需在 Applications 文件夹中双击它即可。为此,我创建了文件~/.zshenv,并在其中编写了导出语句。

现在,当我打开一些终端窗口时,所需的环境变量已经设置好(可以使用env 命令显示),当我从终端启动应用程序时,一切都很好。但是,只要我通过单击 .app 文件启动应用程序,变量就不会在程序上下文中设置。

如果您以这种方式单击它们,我无法在网上找到有关哪个 shell/进程启动应用程序的任何信息。有没有人知道如何解决这个问题?

【问题讨论】:

  • 您如何确保在双击应用程序图标时执行zsh?我不希望会出现这种情况,尽管理论上苹果本可以决定以这种方式实现它。
  • @user1934428 我没有,但我也不太了解 MacOS 的内部工作原理。我只是寻找一种在从 finder 启动时在我的程序上下文中设置环境变量的方法。
  • 使用您的方法,您必须重新定义通过单击图标执行的命令,以运行 您 必须提供的 zsh 脚本,然后启动应用程序。但是,如果您想在修改后的环境中查看 Mac 上的每个应用程序,这也不是一个明智的方法。我认为设置应该进入/etc/launchd.conf。如果这不起作用,我建议您在讨论 MacOS 配置的Ask Different 提出这个问题。

标签: macos environment-variables zsh macos-big-sur .app


【解决方案1】:

open 可能是您的 shell 进程的子进程,但 myApp.app 不是。 open 本质上是要求launchd 启动一个新进程,所以myApp.app 从launchd 继承它的环境,而不是你的shell。

实际的可执行文件存储在包./myApp.app的子目录中;如果你能找到它,你也许可以直接执行它。

我不确定配置打算通过open 或Finder 启动的进程环境的最佳方法是什么;其他人可能能够提供更好的答案。

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 2012-03-01
    • 2018-10-29
    • 2016-01-27
    • 2023-04-07
    • 2015-04-27
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多