Не можете найти двоичные файлы, не можете запустить что-то? Очевидно, проблема $ PATH, но что и почему?
Я нашел хороший путь в 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
и в IntelliJ:
/usr/bin:/bin:/usr/sbin:/sbin
Это указывает на проблему с загрузкой файла при запуске. Моя страница руководства zsh говорит, что порядок загрузки должен быть:
/etc/zshenv
$ZDOTDIR/.zshenv
- Если оболочка входа:
/etc/zprofile
$ZDOTDIR/.zprofile
- Если интерактивная оболочка:
/etc/zshrc
$ZDOTDIR/.zshrc
- Если оболочка входа:
/etc/zlogin
$ZDOTDIR/.zlogin
После добавления echo
к каждому из существующих файлов я получил следующее для iTerm2:
/etc/zprofile
/Users/starver/.zprofile
/etc/zshrc
/Users/starver/.zshrc
/Users/starver/.zlogin
и это в IntelliJ
/etc/zshrc
/Users/starver/.zshrc
IntelliJ считает, что это не оболочка для входа. В конфигурации терминала Jetbrains вы не можете ввести /bin/zsh --login
; это не имеет никакого эффекта. Немного поиграв, я обнаружил, что включение Tools -> Terminal -> Shell Integration делает терминал «оболочкой входа», и история загрузки файла запуска немного улучшилась:
/etc/zshrc
/Users/starver/.zprofile
/Users/starver/.zshrc
/Users/starver/.zlogin
Обратите внимание, что ни один из глобальных файлов запуска zsh и это корневая проблема: /etc/zprofile
содержит:
# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
который man path_helper объясняет:
Утилита path_helper считывает содержимое файлов в каталогах /etc/paths.d и /etc/manpaths.d и добавляет их содержимое в переменные среды PATH и MANPATH соответственно. (Переменная среды MANPATH не будет изменена, если она уже не установлена в среде.)
Выполнение path_helper
хотя бы один раз во время запуска оболочки ДЕЙСТВИТЕЛЬНО важно: paths
и paths.d
- это место, где системные и сторонние установщики определяют свои пути добавления. Не запускается файл запуска системного профиля, поэтому /usr/local/bin
, /usr/local/go
и т. Д. Не находятся в пути.
Я попробовал несколько подходов, ища элегантное решение. По-видимому, реализация терминала jediterm предотвращает подключение к стандартному процессу запуска терминала - поэтому они осуществляют загрузку файла запуска в /Applications/IntelliJ IDEA.app/Contents/plugins/terminal/.zshrc
. Мы можем исправить эту реализацию !! Замените этот файл на:
#!/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
Теперь при запуске терминала IntelliJ я вижу
/etc/zshrc
/etc/zprofile
/Users/starver/.zprofile
/Users/starver/.shell-common
/etc/zshrc
/Users/starver/.zshrc
/Users/starver/.zlogin
Первый /etc/zshrc
выполняется до .zshrc
плагина, я ничего не могу с этим поделать, и он не вызывает каких-либо плохих побочных эффектов ...
Повторите этот процесс для каждого продукта JetBrains, и вы сможете насладиться радостью, которая повсюду - Oh My Zsh.
Примечание : ошибка сообщена JetBrains в https://youtrack.jetbrains.com/issue/IDEA-194488.