Revisamos profundamente cada una de las secciones en nuestro espacio con la meta de mostrarte en todo momento información con la mayor veracidad y certera.
Solución:
¿No puede encontrar binarios, no puede ejecutar cosas? Obviamente un problema de $ PATH, pero ¿qué y por qué?
Me hice eco de un buen camino conocido en iTerm2
/Users/starver/.sdkman/candidates/maven/current/bin:/Users/starver/.sdkman/candidates/groovy/current/bin:/Users/starver/.sdkman/candidates/gradle/current/bin:/usr/local/Cellar/pyenv-virtualenv/1.1.3/shims:/Users/starver/.pyenv/shims:/Users/starver/.pyenv/bin:/Users/starver/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/opt/X11/bin:/usr/local/git/bin:/Users/starver/bin/:/Users/starver/code/go/bin/:/Users/starver/.rvm/bin
y en IntelliJ:
/usr/bin:/bin:/usr/sbin:/sbin
Esto sugiere un problema de carga de archivos de inicio. Mi página de manual de zsh dice que el orden de carga debería ser:
/etc/zshenv
$ZDOTDIR/.zshenv
- Si es un shell de inicio de sesión:
/etc/zprofile
$ZDOTDIR/.zprofile
- Si es un shell interactivo:
/etc/zshrc
$ZDOTDIR/.zshrc
- Si es un shell de inicio de sesión:
/etc/zlogin
$ZDOTDIR/.zlogin
Después de agregar un echo
a cada uno de esos archivos que existían, obtuve lo siguiente para iTerm2:
/etc/zprofile
/Users/starver/.zprofile
/etc/zshrc
/Users/starver/.zshrc
/Users/starver/.zlogin
y esto en IntelliJ
/etc/zshrc
/Users/starver/.zshrc
IntelliJ cree que esto no es un shell de inicio de sesión. En la configuración de la terminal Jetbrains, no puede ingresar /bin/zsh --login
; no tiene ningún efecto. Después de jugar un poco, descubrí que activar Herramientas -> Terminal -> Integración de Shell hace que el terminal sea un “shell de inicio de sesión” y la historia de carga del archivo de inicio mejoró un poco:
/etc/zshrc
/Users/starver/.zprofile
/Users/starver/.zshrc
/Users/starver/.zlogin
Tenga en cuenta que ninguno de los archivos de inicio global de zsh y este es el problema raíz: /etc/zprofile
contiene:
# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
que hombre path_helper explica:
La utilidad path_helper lee el contenido de los archivos en los directorios /etc/paths.d y /etc/manpaths.d y agrega su contenido a las variables de entorno PATH y MANPATH respectivamente. (La variable de entorno MANPATH no se modificará a menos que ya esté configurada en el entorno).
Ejecutando path_helper
al menos una vez durante el inicio del shell es REALMENTE importante: paths
y paths.d
es donde el sistema y los instaladores de terceros definen sus adiciones de ruta. No ejecutar el archivo de inicio del perfil del sistema es la razón /usr/local/bin
, /usr/local/go
, etc. no están en el camino.
Probé varios enfoques, buscando una solución elegante. Aparentemente, la implementación de la terminal jediterm evita que se conecte a un proceso de inicio de terminal estándar, por lo que implementan la carga de archivos de inicio en /Applications/IntelliJ IDEA.app/Contents/plugins/terminal/.zshrc
. ¡Podemos arreglar esa implementación! Reemplace ese archivo con:
#!/bin/zsh
# starver mod
# Jetbrains uses jediterm as a java terminal emulator for all terminal uses.
# There are some apparent limits on use:
# - must use old-style shebang - not the #!/usr/bin/env zsh
# - must implement the startup file loading here
#
# Note: original contents are in lib/terminal.jar
# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
bindkey '^[^[[C' forward-word
bindkey '^[^[[D' backward-word
ZDOTDIR=$_OLD_ZDOTDIR
if [ -n "$JEDITERM_USER_RCFILE" ]
then
source "$JEDITERM_USER_RCFILE"
unset JEDITERM_USER_RCFILE
fi
if [ -n "$ZDOTDIR" ]
then
DOTDIR=$ZDOTDIR
else
DOTDIR=$HOME
fi
if [ -f "/etc/zshenv" ]; then
source "/etc/zshenv"
fi
if [ -f "$DOTDIR/.zshenv" ]; then
source "$DOTDIR/.zshenv"
fi
if [ -n $LOGIN_SHELL ]; then
if [ -f "/etc/zprofile" ]; then
source "/etc/zprofile"
fi
if [ -f "$DOTDIR/.zprofile" ]; then
source "$DOTDIR/.zprofile"
fi
fi
if [ -f "/etc/zshrc" ]; then
source "/etc/zshrc"
fi
if [ -f "$DOTDIR/.zshrc" ]; then
source "$DOTDIR/.zshrc"
fi
if [ -n $LOGIN_SHELL ]; then
if [ -f "/etc/zlogin" ]; then
source "/etc/zlogin"
fi
if [ -f "$DOTDIR/.zlogin" ]; then
source "$DOTDIR/.zlogin"
fi
fi
if [ -n "$JEDITERM_SOURCE" ]
then
source $(echo $JEDITERM_SOURCE)
unset JEDITERM_SOURCE
fi
Ahora, en el inicio de la terminal IntelliJ, veo
/etc/zshrc
/etc/zprofile
/Users/starver/.zprofile
/Users/starver/.shell-common
/etc/zshrc
/Users/starver/.zshrc
/Users/starver/.zlogin
El primero /etc/zshrc
se ejecuta antes que el complemento .zshrc
, no puedo hacer nada al respecto, y no está causando ningún efecto secundario negativo …
Repita el proceso para cada producto JetBrains y podrá disfrutar de la alegría de Oh My Zsh en todas partes.
Nota: Problema informado a JetBrains en https://youtrack.jetbrains.com/issue/IDEA-194488.
zsh --login --interactive
Trabajó para mí como terminal command
, o para abreviar:
zsh -li
Esto cargará / etc / zprofile en Mac y todos los scripts de inicio de sesión.
Si aceptas, tienes el poder dejar un ensayo acerca de qué te ha impresionado de este enunciado.