Як ви "відключите" о-мі-зш (і 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.

Вам потрібно буде перезапустити оболонку, щоб зміни набрали чинності.


Прошу вибачення за своє формулювання. Я вважаю, що я це уточнив. Це зрозуміло зараз? Спасибі, btw.
Чарлі Паркер

@CharlieParker Так, мені було лінь. Я розгорну відповідь, можливо, поясню трохи "чому".
strugee

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-OR , ~/bin/use-whatever--to перемикання між ЗШ рамок.

Зауважте, що зміни набувають чинності лише в нових оболонках zsh, а не в існуючих оболонках.

Перемикання оболонки

Це трохи небезпечно, але якщо ви настільки схильні, ви можете використовувати симпосилання для команди оболонки і встановити символьне посилання як оболонку за замовчуванням. Потім ви можете дотримуватися 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, не роблячи його за замовчуванням, не кладіть параметр .zshrcoh-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 працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.