Как запустить интерактивную оболочку со специальной настройкой

Я хочу начать интерактивную Zsh (на Cygwin) с конкретной настройки проекта:

  1. источник /etc/profile
  2. источник ~/.profile
  3. источник $PROJECT_HOME/Setup.zsh
  4. стать интерактивным

Я добрался до шага 3, но затем оболочка просто завершается.

Я делал такие вещи раньше, но я забыл, как я это сделал. Я пытался за это погуглить но ничего не смог найти. Вероятно, случай неправильных условий поиска.

Добавление $PROJECT_HOME/Setup.zsh в ~/.profile Конечно, это не решение, так как идея состоит в том, чтобы на рабочем столе Windows было несколько значков запуска для запуска оболочек одного из многих проектов.

3 ответа

Решение

Сделайте ваши ярлыки похожими на:

env PROJECT_HOME=~/projects/this zsh

env PROJECT_HOME=~/projects/that zsh

Sourcing $PROJECT_HOME/Setup.zsh теперь будет работать нормально.

Вы не сказали, как вы определяете то, что вы называете несколькими значками запуска , и как именно вы запускаете свой терминал с оболочкой. Например, на моей платформе я использую, а можно для определенного значка на рабочем столе в свойствах поставить команду запуска что-то вроде

      C:\cygwin64\bin\mintty.exe -s 101,26 -e /usr/bin/dash -c "PROJECT=25 /usr/bin/zsh -i -l"

и внутри вашего .zshrc вы определяете значение, какие конкретные настройки проекта нужно загрузить.

В этом подходе я использую временную оболочку (в моем случае: Dash, потому что она загружается быстро) для настройки переменной среды и, наконец, вызываю zsh в качестве оболочки интерактивного входа.

Тот же подход должен работать и с другими эмуляторами терминала, такими как ConEmu.

zsh не очень хорошо это поддерживает. Единственный известный мне способ сделать это — временно переопределить$ZDOTDIRв какой-нибудь временный каталог и вставьте.zshrcтам, который может загружать нужные вам функции. Вот полный пример:

      #!/usr/bin/zsh

dir=`mktemp -d /tmp/adevXXX`

# Preload the shell with all of the shell functions defined in
# build/envsetup.sh.
cat >$dir/.zshrc <<EOF
source $HOME/.zshrc
source build/envsetup.sh
EOF
ZDOTDIR=$dir zsh

rm -r $dir
Другие вопросы по тегам