Wie kann man oh-my-zsh (und zsh) deaktivieren, ohne es zu deinstallieren?

16

Ich habe neue Entwicklungsumgebungen ausprobiert, einschließlich zsh und oh-my-zsh. Nachdem ich oh-my-zsh installiert habe, startet es standardmäßig auf meinen Terminals (iTerm2 und Terminal) immer mit zsh und mit den Einstellungen von oh-my-zsh. Ich habe mich gefragt, ob es möglich ist, zsh und sein Setup mit oh-my-zsh zu "deaktivieren" oder zu beenden, ohne oh-my-zsh deinstallieren zu müssen. Es wäre auch schön zu wissen, wie man sie wieder einschaltet.

Momentan gehen meine Terminals automatisch in zsh (glaube ich) und benutzen das oh-my-zsh automatisch. Ich möchte mehr Kontrolle darüber haben und kann beides kontrollieren, wenn das zsh verwendet wird und wenn die oh-my-zsh-Funktionen verwendet werden.

Eine Sache, die mich auch interessiert, ist, wie die Terminalanwendungen wissen, welche Shell beim Start gestartet werden soll. Das wäre schön, auch kontrollieren zu können!

Wenn Sie so viel wie möglich über das "Warum" jedes Befehls erklären, den Sie mir geben, wäre das nützlich! :)


Ich arbeite unter OS X. Ich bin mir nicht sicher, ob das wichtig ist, aber ich mag Antworten, die allgemeiner auf Unix-Umgebungen anwendbar sind, eher auf meine eigenen.

Charlie Parker
quelle
du willst aufhören zu benutzen zsh? oder oh-my-zsh? welche?
Strugee
eine und beide. dh ich möchte in der Lage sein, beide zu steuern, wenn ich zsh und oh-my-zsh verwende
Charlie Parker

Antworten:

19

Der Wortlaut Ihrer Frage ist mehrdeutig, daher kann ich nicht sagen, ob Sie die Verwendung beenden zshmöchten oder nicht oh-my-zsh. Ich werde beide behandeln.

Deaktivieren zsh

Führen chshSie einfach die zuvor verwendete Shell aus und wählen Sie sie aus. Wenn Sie nicht wissen, welche Shell Sie zuvor verwendet haben, ist dies mit ziemlicher Sicherheit der Fall bash. Dieser Befehl ändert die "Login-Shell", die Ihrem Benutzer zugeordnet ist. Im Wesentlichen ändert es Ihre Standard-Shell.

Sie müssen ein neues Terminalfenster öffnen, damit die Änderungen wirksam werden. Wenn dies nicht funktioniert, müssen Sie sich abmelden und erneut anmelden, um Ihre Umgebung neu zu initialisieren.

Nur deaktivieren oh-my-zsh

  1. Überprüfen Sie, ob ~/.zshrc.pre-oh-my-zshvorhanden. Das tut es wahrscheinlich. (Diese Datei wurde erstellt, als das oh-my-zshInstallationsskript Ihre vorherige .zshrcaus dem Weg .zshrcräumte . Es handelt sich um eine Startdatei von zsh, ähnlich wie .bashrcfür bash.)
  2. Wenn doch, tu es mv ~/.zshrc ~/.zshrc.oh-my-zsh. Dies wird das oh-my-zsh-created .zshrcaus dem Weg räumen , so dass wir das Original wiederherstellen können mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc.
  3. Wenn es nicht existiert, öffnen Sie es ~/.zshrcin einem Texteditor. Suchen Sie die Zeile mit der Aufschrift source $ZSH/.oh-my-zshund kommentieren Sie sie aus oder entfernen Sie sie. Dies deaktiviert die Initialisierung von oh-my-zsh.

Sie müssen Ihre Shell neu starten, damit die Änderungen wirksam werden.

strugee
quelle
Ich entschuldige mich für meine Formulierung. Ich glaube, ich habe es geklärt. Ist es jetzt klar? Danke übrigens.
Charlie Parker
@CharlieParker Ja, ich war faul. Ich werde die Antwort erweitern und vielleicht ein bisschen das "Warum" erklären.
Strugee
1
@CharlieParker, falls Sie es nicht bemerkt haben, habe ich diese Antwort aktualisiert. Lassen Sie mich wissen, ob etwas verbessert werden kann.
Strugee
4

ZSH Config Switching

Wenn Sie verschiedene zsh Konfiguration Frameworks (oh-my-zsh, zprezto usw.) testen wollen und zwischen ihnen wechseln, Ihre beste Wette ist mit symbolischen Links für ~/.zsh, ~/.zshrc, ~/.zlogin, ~/.zlogout, ~/.zprofile, und ~/.zshenv. Möglicherweise möchten Sie für jedes Framework ein Shell-Skript erstellen, um diese Symlinks für einen schnelleren Wechsel zu erstellen.

Legen Sie Ihre Framework-Konfigurationen in eigenen Ordnern ab. Für jedes Framework.

  • Installieren Sie andernfalls das Framework in einem eigenen Ordner
  • Wenn das Framework die Installation dazu zwingt ~/.zsh, dann
    • Schützen Sie zuerst den Strom ~/.zsh. Entweder
      • entferne den ~/.zshSymlink; rm ~/.zsh, oder
      • Verschiebe den ~/.zshOrdner.mv ~/.zsh ~/.zsh.backup
    • Führen Sie das Framework-Installationsprogramm aus.
    • Verschieben Sie den Framework-Ordner in ein eigenes Verzeichnis. zb mv ~/.zsh ~/.oh-my-zsh.
  • Wiederholen Sie dies für jedes Framework.

Erstellen Sie anschließend für jedes Framework ein Shell-Skript, um die erforderlichen Symlinks zu erstellen. Hier ist ein Beispiel für zprezto, da ich es bereits benutze.

$ 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

Dieses Skript ist ziemlich einfach und basiert auf der Tatsache, dass alle meine Symlinks nach dem gleichen Muster organisiert sind. Sie können das Entfernen kopieren und einfügen und nach der Schleife Linien für Symlinks erstellen , die nicht dem Muster folgen.

Ist das erledigt, Verwendung ~/bin/use-zprezto--oder ~/bin/use-whatever--to Schalter zwischen zsh Frameworks.

Beachten Sie, dass Änderungen nur in neuen zsh-Shells wirksam werden, nicht in vorhandenen Shells.

Shell-Umschaltung

Es ist ein bisschen gefährlich, aber wenn Sie so geneigt sind, können Sie einen Symlink für Ihren Shell-Befehl verwenden und den Symlink als Ihre Standard-Shell festlegen. Sie können dann der use-*obigen Skriptmethode folgen , um Ihre Standard-Shell zu ändern.

Als Beispiel mit 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

Dies ist gefährlich, weil Sie sich nicht unter einem Benutzer anmelden können, wenn die in gespeicherte Shell /etc/passwdkein gültiges Programm ist. Sie können sich also aus Ihrem Konto ausschließen, wenn Sie nicht vorsichtig sind. dh Ihr ~/.shellSymlink ist kaputt oder verweist nicht auf ein interaktives Programm. Sie können dies gerne mit einem Benutzerkonto versuchen, dies wird jedoch für Ihr rootKonto NICHT EMPFOHLEN .

Wenn Sie trotzdem fortfahren möchten, dann

$ ~/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
quelle
3

chsh -s / bin / bash

Um eine neue Standard-Shell manuell festzulegen, führen Sie chsh -s / my / new / shell aus, z. B. chsh -s / bin / bash. Dann öffnen Sie einfach Ihre Muscheln.

Honghui Li
quelle
2

Sie können zsh anweisen, die benutzerspezifischen Konfigurationsdateien aus einem anderen Verzeichnis zu laden, indem Sie die Umgebungsvariable ZDOTDIRvor dem Starten von zsh festlegen.

Wenn Sie zsh starten möchten, ohne Ihre Konfigurationsdateien zu laden, legen Sie ZDOTDIRein nicht vorhandenes Verzeichnis fest. Wenn Sie Systemkonfigurationsdateien (abgesehen von /etc/zshenv) überspringen möchten , können Sie sie ausführen zsh -f. Wenn Sie Systemkonfigurationsdateien überspringen möchten, aber die benutzerspezifischen Dateien ausführen möchten, führen Sie diese aus zsh -d.

Wenn Sie beispielsweise oh-my-zsh testen möchten, ohne es zur Standardeinstellung zu machen, legen Sie das .zshrcvon oh-my-zsh nicht in Ihrem Home-Verzeichnis ab. Stellen Sie es stattdessen woanders hin, z. in ~/.oh-my-zsh, und führen ZDOTDIR=~/.oh-my-zsh zshSie dann aus, wenn Sie oh-my-zsh verwenden möchten.


Terminalanwendungen führen die durch die SHELLUmgebungsvariable angegebene Shell aus . Wenn diese Variable nicht gesetzt ist, führen sie die in der Benutzerdatenbank ( /etc/passwd) angegebene Anmeldeshell aus . Sie können eine andere Anwendung anfordern, wenn Sie einen Terminalemulator starten, z xterm -e fish.

Gilles 'SO - hör auf böse zu sein'
quelle
0

Da es in @Gilles ein bisschen versteckt ist, antworten Sie auf den schnellen Weg, zsh ohne jegliche Konfiguration zu laden, zB .zshrc .zshenv etc

zsh -f

Dies ist nützlich, wenn Sie testen möchten, ob irgendetwas in Ihrer Konfiguration ein Feature von zsh daran hindert, zu funktionieren.

zzapper
quelle