Как «отключить» oh-my-zsh (и zsh), не удаляя его?

16

Я пробовал новые среды разработки, включая zsh и oh-my-zsh. Теперь, когда я установил oh-my-zsh, он запускается по умолчанию на моих терминалах (iTerm2 и терминал) всегда начинаются с zsh и с настройками, включенными из oh-my-zsh. Мне было интересно, можно ли было «отключить» или прекратить использовать zsh и его настройку с помощью oh-my-zsh без необходимости удаления oh-my-zsh? Также было бы неплохо узнать, как их снова включить.

В настоящее время мои терминалы автоматически переходят в zsh (я думаю) и автоматически используют oh-my-zsh. Я хочу иметь больше контроля над этим, и я могу контролировать и то, и другое, когда используется zsh и когда используются функции oh-my-zsh.

Мне также интересно знать, как терминальные приложения узнают, какая оболочка должна запускаться при запуске. Было бы неплохо иметь возможность контролировать тоже!

Если вы объясните как можно больше «почему» каждой команды, которую вы мне дадите, это будет полезно! :)


Я работаю на OS X. Не уверен, что это имеет значение, но мне больше нравятся ответы, которые более применимы к более общим средам Unix, чем к моей собственной.

Чарли Паркер
источник
Вы хотите прекратить использование zsh? или oh-my-zsh? который?
Strugee
и то и другое. т.е. я хочу иметь возможность контролировать и то, и другое, когда я использую zsh и oh-my-zsh
Чарли Паркер

Ответы:

19

Формулировка вашего вопроса неоднозначна, поэтому я не могу сказать, хотите ли вы, чтобы вы прекратили использовать zshили вы хотите прекратить использовать oh-my-zsh. Я покрою оба.

Отключение zsh

Просто беги chsh и выберите любую оболочку, которую вы использовали раньше. Если вы не знаете, какую оболочку вы использовали раньше, это почти наверняка bash. Эта команда изменяет «оболочку входа», связанную с вашим пользователем. По сути, это меняет вашу оболочку по умолчанию.

Вам нужно будет открыть новое окно терминала, чтобы изменения вступили в силу. Если это не работает, вам нужно будет выйти и снова войти, чтобы повторно инициализировать вашу среду.

Отключение только oh-my-zsh

  1. Проверьте, ~/.zshrc.pre-oh-my-zshсуществует ли . Это, вероятно, делает. (Этот файл будет создан, когда oh-my-zshустановочный скрипт переместит ваш предыдущий файл .zshrcс пути. .zshrcЭто файл запуска zsh, похожий .bashrcнаbash .)
  2. Если это так, делай mv ~/.zshrc ~/.zshrc.oh-my-zsh. Это oh-my-zshуберет созданный .zshrcпуть, и мы сможем восстановить оригинал, выполнивmv ~/.zshrc.pre-oh-my-zsh ~/.zshrc .
  3. Если он не существует, откройте ~/.zshrcв текстовом редакторе. Найдите строку с надписью source $ZSH/.oh-my-zshи либо закомментируйте ее, либо удалите. Это отключит инициализацию oh-my-zsh.

Вам нужно будет перезапустить вашу оболочку, чтобы изменения вступили в силу.

strugee
источник
Я прошу прощения за мою формулировку. Я полагаю, что разъяснил это. Это теперь ясно? Спасибо, кстати.
Чарли Паркер
@CharlieParker да, мне было лень. Я расширю ответ, возможно, объясню немного «почему».
стружка
1
@CharlieParker, если вы не заметили, я обновил этот ответ. дайте мне знать, если что-нибудь можно улучшить.
Strugee
4

ZSH Config Switching

Если вы хотите протестировать различные рамки конфигурации ЗШ (о-мой-ЗШ, zprezto и т.д.) и переключаться между ними, лучше всего использует символические ссылки на ~/.zsh, ~/.zshrc, ~/.zlogin, ~/.zlogout, ~/.zprofile, и~/.zshenv . Возможно, вы захотите создать сценарии оболочки для каждой платформы, чтобы создать эти символические ссылки для более быстрого переключения.

Поместите ваши конфигурации фреймворка в свои собственные папки. Для каждого каркаса.

  • Установите фреймворк в свою папку, если это возможно, иначе
  • Если каркас заставляет установку ~/.zsh , то
    • Защитить ток ~/.zsh первым. Или
      • удалить ~/.zshсимволическую ссылку;rm ~/.zsh, или
      • переместить ~/.zshпапку;mv ~/.zsh ~/.zsh.backup
    • Запустите установщик фреймворка.
    • Переместите папку фреймворка в собственный каталог. например mv ~/.zsh ~/.oh-my-zsh.
  • Повторите для каждой рамки.

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

$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zprezto
#!/bin/bash
SYMLINKS=".zsh .zshrc .zshlogin .zshlogout .zshprofile .zpreztorc .zshenv .zshrc"
CONFIG_HOME="$HOME/.zprezto"

# check for unexpected error conditions
for sym in $SYMLINKS; do
   # report an error and quit if $sym exists and is not a symlink
   [[ -e "$HOME/$sym" -a ! -h "$HOME/$sym" ]] && { echo "error:  '$HOME/$sym' is not a symlink!"; return 1; }
done

# now create the symlinks now that nothing should go wrong
for sym in $SYMLINKS; do
   # remove old symlink if it exists
   [[ -h "$HOME/$sym" ]] && rm -f "$HOME/$sym"
   # create new symlink
   ln -s "$CONFIG_HOME/$sym" "$HOME/$sym"
done

# uncomment next line to start a new zsh shell.  CAUTION: each call is a zsh shell inside a zsh shell.  Too many calls will put you in limbo :D
#/usr/bin/env zsh
EOF

$ chmod 700 ~/bin/use-zprezto

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

После этого используйте - ~/bin/use-zpreztoили ~/bin/use-whatever-, чтобы переключаться между zsh-фреймворками.

Обратите внимание, что изменения вступают в силу только в новых оболочках zsh, а не в существующих оболочках.

Shell Switching

Это немного опасно, но если вы так склонны, вы можете использовать символическую ссылку для вашей команды оболочки и установить символическую ссылку в качестве оболочки по умолчанию. Затем вы можете следоватьuse-* выше методу сценария, чтобы изменить оболочку по умолчанию.

Как пример с Zsh ...

$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zsh
#!/bin/bash
# check for valid shell symlink
if [[ ! -h "$HOME/.shell" ]]; then
  echo "error: $HOME/.shell is not a symlink!"
  return 1
fi

# remove existing shell symlink if it exists
[[ -h "$HOME/.shell" ]] && rm -f "$HOME/.shell"

# create new shell symlink, but warn user if this fails!
if ! ln -s /usr/bin/zsh "$HOME/.shell"; then
  echo "ERROR: failed to create $HOME/.shell symlink.  Manually create the symlink or future logins will fail!."
  return 2
fi
EOF

$ chmod 700 ~/bin/use-zsh

Причина, по которой это опасно, заключается в том, что вы не можете войти в систему под пользователем, если оболочка, в которой он хранится, /etc/passwdне является действительной программой Таким образом, вы можете заблокировать себя из своей учетной записи, если вы не будете осторожны; т.е. ваша ~/.shellсимволическая ссылка не работает или не указывает на интерактивную программу. Вы можете попробовать это с учетной записью пользователя, но это НЕ РЕКОМЕНДУЕТСЯ для вашей rootучетной записи.

Если вы все еще хотите продолжить, то

$ ~/bin/use-zsh         # ensures ~/.shell exists for chsh
$ echo "$HOME/.shell | sudo tee -a /etc/shells    # add symlink to system's list of valid shells
$ chsh -s ~/.shell      # changes default shell in /etc/passwd for $USER
Джастин С
источник
3

chsh -s / bin / bash

Чтобы вручную установить новую оболочку по умолчанию, выполните команду chsh -s / my / new / shell, например, chsh -s / bin / bash. Затем просто откройте свои снаряды.

Хунхуй Ли
источник
2

Вы можете указать zsh загрузить файлы конфигурации для каждого пользователя из другого каталога, установив переменную среды ZDOTDIRперед запуском zsh.

Если вы хотите запустить zsh без загрузки ваших файлов конфигурации, установите ZDOTDIRнесуществующий каталог. Если вы хотите пропустить файлы конфигурации системы (кроме /etc/zshenv), вы можете запустить zsh -f. Если вы хотите пропустить файлы конфигурации системы, но запустите файлы для каждого пользователя, запустите zsh -d.

Например, если вы хотите протестировать oh-my-zsh, не устанавливая его по умолчанию, не помещайте .zshrcиз oh-my-zsh в свой домашний каталог. Вместо этого поместите это где-нибудь еще, например. в ~/.oh-my-zsh, а затем запустите, ZDOTDIR=~/.oh-my-zsh zshкогда вы хотите использовать oh-my-zsh.


Терминальные приложения запускают оболочку, указанную SHELLпеременной среды. Если эта переменная не установлена, они запускают оболочку входа, указанную в базе данных пользователя ( /etc/passwd). Вы можете запросить другое приложение при запуске эмулятора терминала, например xterm -e fish.

Жиль "ТАК - перестань быть злым"
источник
0

Поскольку это немного скрыто в @Gilles, ответьте на быстрый способ загрузки zsh без каких-либо настроек, например .zshrc .zshenv и т. Д.

zsh -f

Это полезно, когда вы хотите проверить, не мешает ли что-либо в вашей конфигурации какой-либо функции zsh.

zzapper
источник