Jak „wyłączyć” oh-my-zsh (i zsh) bez odinstalowywania?

16

Próbowałem nowych środowisk deweloperskich, w tym zsh i oh-my-zsh. Teraz, gdy zainstalowałem oh-my-zsh, zaczyna się domyślnie na moich terminalach (iTerm2 i terminal) zawsze zaczynają się od zsh i ustawieniami włączonymi od oh-my-zsh. Zastanawiałem się, czy można „wyłączyć” lub przestać używać zsh i jego konfiguracji z oh-my-zsh bez konieczności odinstalowywania oh-my-zsh? Byłoby również miło wiedzieć, jak je ponownie włączyć.

Obecnie moje terminale automatycznie przechodzą w zsh (myślę) i automatycznie używają oh-my-zsh. Chcę mieć nad tym większą kontrolę, a ja mogę kontrolować zarówno, gdy używany jest zsh, jak i gdy używane są funkcje oh-my-zsh.

Interesuje mnie również to, w jaki sposób aplikacje terminalowe wiedzą, którą powłokę uruchomić przy uruchamianiu. Fajnie byłoby też móc kontrolować!

Jeśli wyjaśnisz jak najwięcej „dlaczego” każdego polecenia, które mi wydasz, to by się przydało! :)


Korzystam z systemu OS X. Nie jestem pewien, czy to ma znaczenie, ale bardziej lubię odpowiedzi bardziej dostosowane do bardziej ogólnych środowisk uniksowych, a nie do moich.

Charlie Parker
źródło
chcesz przestać używać zsh? czy oh-my-zsh? który?
strugee
jedno i drugie. tzn. chcę mieć możliwość kontrolowania obu, gdy używam zsh i oh-my-zsh
Charlie Parker

Odpowiedzi:

19

Treść twojego pytania jest dwuznaczna, więc nie mogę powiedzieć, czy masz na myśli, że chcesz przestać używać, zshczy chcesz przestać oh-my-zsh. Obejmę oba.

Wyłączanie zsh

Po prostu uruchom chshi wybierz powłokę, której używałeś wcześniej. Jeśli nie wiesz, jakiej powłoki używałeś wcześniej, to prawie na pewno bash. To polecenie zmienia „powłokę logowania” powiązaną z użytkownikiem. Zasadniczo zmienia domyślną powłokę.

Będziesz musiał otworzyć nowe okno terminala, aby zmiany odniosły skutek. Jeśli to nie zadziała, musisz się wylogować i zalogować ponownie, aby ponownie zainicjować środowisko.

Wyłączanie tylko oh-my-zsh

  1. Sprawdź, czy ~/.zshrc.pre-oh-my-zshistnieje. Prawdopodobnie tak. (Plik ten stworzono gdy oh-my-zshskrypt instalacyjny przeniósł swoją poprzednią .zshrcz drogi. .zshrcPlik jest uruchomienie zsh, podobnie jak .bashrcdla bash).
  2. Jeśli tak, zrób mv ~/.zshrc ~/.zshrc.oh-my-zsh. Spowoduje to usunięcie oh-my-zsh-tworzonego .zshrc, abyśmy mogli przywrócić oryginał, wykonując mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc.
  3. Jeśli nie istnieje, otwórz ~/.zshrcw edytorze tekstu. Znajdź wiersz, który mówi, source $ZSH/.oh-my-zshalbo go skomentuj, albo usuń. Spowoduje to wyłączenie inicjalizacji oh-my-zsh.

Będziesz musiał zrestartować powłokę, aby zmiany odniosły skutek.

strugee
źródło
Przepraszam za moje sformułowania. Myślę, że to wyjaśniłem. Czy to już jasne? Dzięki btw.
Charlie Parker
@CharlieParker tak, byłem leniwy. Rozszerzę odpowiedź, może wyjaśnię trochę „dlaczego”.
strugee
1
@CharlieParker na wypadek, gdybyś nie zauważył, zaktualizowałem tę odpowiedź. daj mi znać, jeśli coś można poprawić.
strugee
4

Przełączanie konfiguracji ZSH

Jeśli chcesz przetestować różne ramy konfiguracji zsh (oh-my-zsh, zprezto, etc) i przełączać się między nimi, najlepiej jest za pomocą łączy symbolicznych dla ~/.zsh, ~/.zshrc, ~/.zlogin, ~/.zlogout, ~/.zprofile, i ~/.zshenv. Możesz utworzyć skrypty powłoki dla każdej struktury, aby utworzyć te dowiązania symboliczne w celu szybszego przełączania.

Umieść konfiguracje frameworka we własnych folderach. Dla każdego frameworka.

  • Jeśli to możliwe, zainstaluj środowisko w swoim folderze, w przeciwnym razie
  • Jeśli środowisko wymusza instalację ~/.zsh, to
    • ~/.zshNajpierw chroń prąd . Zarówno
      • usuń ~/.zshdowiązanie symboliczne; rm ~/.zshlub
      • przenieś ~/.zshfolder;mv ~/.zsh ~/.zsh.backup
    • Uruchom instalator frameworka.
    • Przenieś folder frameworka do własnego katalogu. np mv ~/.zsh ~/.oh-my-zsh.
  • Powtórz dla każdej struktury.

Po zakończeniu utwórz skrypt powłoki dla każdego frameworka, aby utworzyć niezbędne dowiązania symboliczne. Oto przykład dla zprezto, ponieważ już go używam.

$ 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

Ten skrypt jest dość prosty i polega na tym, że wszystkie moje dowiązania symboliczne są zorganizowane według tego samego wzorca. Możesz skopiować i wkleić usuń i utworzyć linie po pętli dla dowiązań symbolicznych, które nie są zgodne ze wzorem.

Po zakończeniu użyj ~/bin/use-zprezto opcji ~/bin/use-whatever- lub -, aby przełączać się między ramami zsh.

Zauważ, że zmiany obowiązują tylko w nowych powłokach Zsh, a nie w istniejących powłokach.

Przełączanie powłok

Jest to trochę niebezpieczne, ale jeśli masz na to ochotę, możesz użyć dowiązania symbolicznego do polecenia powłoki i ustawić dowiązanie symboliczne jako domyślną powłokę. Następnie możesz postępować zgodnie zuse-* zastosować powyższą metodę skryptu, aby zmienić domyślną powłokę.

Jako przykład z 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

Jest to niebezpieczne, ponieważ nie można zalogować się pod użytkownikiem, jeśli przechowywana w nim powłoka /etc/passwdnie jest poprawnym programem. Możesz więc zablokować swoje konto, jeśli nie będziesz ostrożny; tzn. twoje ~/.shelldowiązanie symboliczne jest zepsute lub nie wskazuje na program interaktywny. Możesz spróbować tego z kontem użytkownika, ale NIE jest to ZALECANE dla twojego rootkonta.

Jeśli nadal chcesz kontynuować, to

$ ~/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
Justin C.
źródło
3

chsh -s / bin / bash

Aby ręcznie ustawić nową domyślną powłokę, wykonaj polecenie chsh -s / my / new / shell, np. Chsh -s / bin / bash. Następnie ponownie otwórz swoje muszle.

Honghui Li
źródło
2

Możesz powiedzieć zsh, aby ładował pliki konfiguracyjne dla użytkownika z innego katalogu, ustawiając zmienną środowiskową ZDOTDIRprzed uruchomieniem zsh.

Jeśli chcesz uruchomić zsh bez ładowania plików konfiguracyjnych, ustaw ZDOTDIRkatalog na nieistniejący. Jeśli chcesz pominąć pliki konfiguracji systemu (oprócz /etc/zshenv), możesz uruchomić zsh -f. Jeśli chcesz pominąć pliki konfiguracji systemu, ale uruchom pliki poszczególnych użytkowników, uruchomzsh -d .

Na przykład, jeśli chcesz przetestować dysk oh-my-zsh bez ustawiania go jako domyślnego, nie umieszczaj polecenia .zshrcoh-my-zsh w katalogu domowym. Zamiast tego umieść to w innym miejscu, np. w ~/.oh-my-zsh, a następnie uruchom, ZDOTDIR=~/.oh-my-zsh zshgdy chcesz użyć oh-my-zsh.


Aplikacje terminalowe uruchamiają powłokę wskazaną przez SHELLzmienną środowiskową. Jeśli ta zmienna nie jest ustawiona, uruchamiają powłokę logowania wskazaną w bazie danych użytkowników ( /etc/passwd). Możesz uruchomić inną aplikację podczas uruchamiania emulatora terminala, np xterm -e fish.

Gilles „SO- przestań być zły”
źródło
0

Ponieważ jest to trochę ukryte w @Gilles, odpowiedz na szybki sposób ładowania zsh bez jakiejkolwiek konfiguracji, np. .Zshrc .zshenv itp.

zsh -f

Jest to przydatne, gdy chcesz sprawdzić, czy cokolwiek w twojej konfiguracji uniemożliwia działanie jakiejś funkcji zsh.

zzapper
źródło