用 launchctl setenv 给图形应用设置环境变量
让从 Dock/聚焦启动的应用读到 JAVA_HOME 等变量——这些变量写进 .zshrc 是读不到的。
执行 launchctl setenv JAVA_HOME /path/to/jdk,之后从 Dock 启动的每个应用都能看到该变量。
01命令
命令
$ launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home02作用说明
图形应用由 launchd 启动而非 shell,因此 .zshrc 里的 export 对它们无效。launchctl setenv 把变量注入当前用户的 launchd 实例,之后新启动的应用全部继承,无需注销。可用 launchctl getenv 读回、unsetenv 移除;注意重启后失效,要长期生效需写入 LaunchAgent。
03风险
!注意: 已经运行的应用仍保留旧环境——退出并重新启动才能读到新变量。
04撤销
撤销
$ launchctl unsetenv JAVA_HOME05来源
- launchctl - Interact with launchd依据: Documents the launchctl setenv and getenv subcommands that set and read environment variables for all processes managed by the user's launchd.
- launchctl(1) man page依据: Describes 'launchctl setenv name value' which sets an environment variable in launchd so later-spawned jobs inherit it, and unsetenv to remove it.
最后验证: 2026-09-19 · 分类: 系统与设置