33.9 C
Colombia
lunes, julio 7, 2025

MACOS: al abrir aplicaciones de terminal, elunchd está configurando la ruta $ inicial de manera inconsistente. ¿Por qué?


Recientemente descubrí que launchd en macOS proporciona un valor predeterminado inicial $PATH a nuevas ventanas de terminal que no es la ruta predeterminada establecida por macOS en iniciar sesión, sino que se produce por launchd Según (presumiblemente) su propia lógica interna – sin los cambios alguna vez se han realizado a través de launchctl o cualquier .plist archivo que pude encontrar.

Este es el caso si usa el Terminal.app distribuido por Apple, o un terminal de terceros como Alacritty.app.

La ruta predeterminada en macOS en iniciar sesión, como se puede verificar con sysctl -n person.cs_pathes

/usr/bin:/bin:/usr/sbin:/sbin

Pero cuando coloqué echo $PATH en la primera línea de ~/.zshenvque se obtiene antes /and many others/zprofile y cualquier otro archivo de configuración de shell, estaba viendo un completamente diferente $PATH Al abrir una nueva ventana en Alacritty:

/usr/native/bin:/decide/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin

Que verifiqué para venir launchd Buscando la salida de launchctl dumpstate:

pid/72911 = {
    kind = pid
    originator = /Functions/Alacritty.app
    creator = alacritty[72911]
    ...
    surroundings = {
        PATH => /usr/native/bin:/decide/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin
        ...
    }
        ...
}

Después de reiniciar Alacritty, con solo una ventana y una instancia de la carcasa igual echo Comando producido:

/usr/bin:/bin:/usr/sbin:/sbin

Que es lo que debería ser. Pero luego, abriendo el valor predeterminado Terminal.appEntiendo

/usr/bin:/bin

Que, nuevamente, no es el valor predeterminado del sistema operativo.

Esto no necesariamente afecta mi capacidad de usar el caparazón porque puedo establecer $PATH en .zshenv o .zprofile a lo que quiera, pero requiere que anule el $PATH eso launchd Conjuntos si deseo controlar el orden de búsqueda. De hecho, que launchd lo está haciendo hace que el management de la orden de búsqueda sea essential porque aparentemente no hay garantía de que la inicial $PATH entregado al caparazón será consistente.

¿Alguien sabe por qué launchd está proporcionando un inconsistente $PATH? ¿Hay alguna rima o razón para lo que determine incluir o no en el $PATH que proporciona a cada caparazón creado con cada nueva ventana de terminal y variarla mediante la aplicación terminal?

De nuevo, tengo nunca

  1. emitido launchctl setenv PATH <path>
  2. emitido sudo launchctl config person <path> o config system <path>
  3. modificado cualquiera .plist archivo en cualquier lugar (o encontrado cualquiera que establezca el PathEnvironmentVariable llave).

Estoy ejecutando macOS Sequoia 15.4 (24e248) en un M2 MacBook Professional, usando el inventory ZSH Shell.

El respuesta más cercana Podría encontrar menciones que launchd manipula el valor predeterminado $PATHpero el autor no especifica cómo o por qué.


Actualización 1

Para la aplicación de terminal de inventory, launchctl dumpstate está mostrando

pid/45557 = {
    kind = pid
    originator = /System/Functions/Utilities/Terminal.app
    creator = Terminal[45557]
        ...
    surroundings = {
        PATH => /usr/bin:/bin:/usr/sbin:/sbin
                ...
        }
        ...
}

Que es de hecho el correcto, predeterminado $PATH. Sin embargo, para la aplicación de terminal de inventory, una echo $PATH declaración en la primera línea de .zshenv continúa resultando en el truncado

/usr/bin:/bin

Actualización 2

Los desarrolladores que trabajan en alacritty me he dicho que ellos No tocar el $PATH variable.


Actualización 3

Con echo $PATH Como la primera línea en .zshenv productor

/usr/native/bin:/decide/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin

en Alacritty, y

/usr/bin:/bin

en terminal, ejecutando posteriormente

/usr/bin/env -i /bin/zsh -l -osourcetrace

por GairfowlLa sugerencia (ver comentarios) muestra lo mismo echo Comando que sale un completamente diferente $PATH Tanto en Alacritty como en Terminal:

+/Customers/Me/.zshenv:1> <sourcetrace>      # line 1
/bin:/usr/bin:/usr/ucb:/usr/native/bin    # line 2 `echo $PATH`

No hay /usr/ucb directorio o archivo, oculto o no, que pueda encontrar. Pero dado que una búsqueda en Google de “UCB” me cube que es una referencia a la “Universidad de California, Berkeley” (y que el resultado es de env -i zsh), ¿podría ser Zsh en sí mismo está manipulando la inicial? $PATH? Y luego, o algo más en macOS se está transformando inconsistentemente /usr/ucb en una de estas rutas no configuradas antes de completar echo $PATH en la primera línea de .zshenvy a veces informante launchd del cambio (haciendo que aparezca en el launchctl dumpstate producción)?

Tenga en cuenta que esas dos líneas del env Se imprimen la salida antes /and many others/zprofile se obtiene, por lo tanto, Apple path_helper La utilidad aún no está en juego.


Debo señalar que en todos mis ejemplos hasta ahora el caparazón ha sido consistentemente en ambos login y interactive estados, verificados con setopt.

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles