【问题标题】:what does launchctl config user path do?launchctl config 用户路径有什么作用?
【发布时间】:2019-01-09 04:55:32
【问题描述】:

我在 MacOS 中遇到了一个奇怪的 PATH 环境变量问题,我花了几个小时来调试:

  • 前段时间,当我尝试修复 IntelliJ 终端 PATH 变量与 iTerm 不同的问题时,我按照在线文章执行了此操作:

    sudo launchctl config user path $PATH

  • 显然,此命令在某个时间点设置并保留 PATH 变量的值,并且在我启动新的 zsh 会话时甚至在我的 shell 加载之前加载该变量。直到最近我才意识到这个问题,因为我删除了 zshrc 中的一些路径位置设置,而 PATH 变量仍然没有反映

  • 我的问题是该命令将PATH 变量值存储在哪里?以及它如何在我的 shell 加载之前加载该值?

(对于想知道我如何解决问题的人:我再次执行命令将路径设置为空值:sudo launchctl config user path ''

【问题讨论】:

    标签: macos shell terminal zsh launchctl


    【解决方案1】:

    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
    

    【讨论】:

    • 出于好奇,您是如何得知此事的?网上关于launchctl的文档不多
    • @PhuongNguyen:我蛮力强迫它:我使用命令添加了一个不存在的虚拟路径,例如xyzzy 然后使用 ripgrep 在整个文件系统中搜索该字符串。花了一段时间,但它找到了。
    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2013-10-20
    • 2016-05-22
    • 2019-09-02
    • 2010-12-26
    相关资源
    最近更新 更多