launchctl 配置用户路径有什么作用?
what does launchctl config user path do?
我在 MacOS 中遇到了一个关于 PATH 环境变量的奇怪问题,我花了几个小时来调试:
前段时间,当我试图解决 IntelliJ terminal PATH variable not the same with iTerm 的问题时,我关注了一篇在线文章并执行了这个:
sudo launchctl config user path $PATH
显然,此命令会在某个时间的某个时刻设置并保留 PATH 变量的值,并且该变量甚至在我开始新的 zsh 会话时加载 shell 之前就已加载。直到最近我才意识到这个问题,因为我在我的 zshrc
中删除了一些路径位置设置并且 PATH
变量仍然没有反映
我的问题是该命令将 PATH
变量值存储在哪里?以及如何在我的 shell 加载之前加载该值?
(想知道我是如何解决这个问题的人:我再次执行命令将路径设置为空值:sudo launchctl config user path ''
)
sudo launchctl config user path <...>
命令更新 /private/var/db/com.apple.xpc.launchd/config/user.plist
:
$ cat /private/var/db/com.apple.xpc.launchd/config/user.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>PathEnvironmentVariable</key>
<string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
</plist>
在我的系统上测试过,目前是 macOS 12.1 (AppleSilicon)。您可以将 user
替换为 system
以对系统范围的首选项进行操作。奇怪的是,两者都需要 sudo。
您可以通过以下方式查询launchd
的当前设置:
launchctl getenv PATH
相关: 您还可以通过执行查询默认值 PATH
:
sysctl user.cs_path
我在 MacOS 中遇到了一个关于 PATH 环境变量的奇怪问题,我花了几个小时来调试:
前段时间,当我试图解决 IntelliJ terminal PATH variable not the same with iTerm 的问题时,我关注了一篇在线文章并执行了这个:
sudo launchctl config user path $PATH
显然,此命令会在某个时间的某个时刻设置并保留 PATH 变量的值,并且该变量甚至在我开始新的 zsh 会话时加载 shell 之前就已加载。直到最近我才意识到这个问题,因为我在我的
zshrc
中删除了一些路径位置设置并且PATH
变量仍然没有反映我的问题是该命令将
PATH
变量值存储在哪里?以及如何在我的 shell 加载之前加载该值?
(想知道我是如何解决这个问题的人:我再次执行命令将路径设置为空值:sudo launchctl config user path ''
)
sudo launchctl config user path <...>
命令更新 /private/var/db/com.apple.xpc.launchd/config/user.plist
:
$ cat /private/var/db/com.apple.xpc.launchd/config/user.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>PathEnvironmentVariable</key>
<string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
</plist>
在我的系统上测试过,目前是 macOS 12.1 (AppleSilicon)。您可以将 user
替换为 system
以对系统范围的首选项进行操作。奇怪的是,两者都需要 sudo。
您可以通过以下方式查询launchd
的当前设置:
launchctl getenv PATH
相关: 您还可以通过执行查询默认值 PATH
:
sysctl user.cs_path