Zsh-Erweiterungen verwenden - Warum muss ich "zsh" manuell eingeben, damit es angezeigt wird?

2959
Wayne Molina

Ich benutze Robby Russels "oh-my-zsh" -Erweiterung unter OSX 10.5 Leopard. Ich finde jedoch, dass es nicht standardmäßig geladen ist. Wenn ich ein neues Terminal starte, wird die ZSH-Eingabeaufforderung "default" verwendet, und ich muss manuell "zsh" eingeben und die Eingabetaste drücken, um die Eingabeaufforderung "erweitert" zu erhalten. In meiner .zshrcDatei ist der ZSH-Pfad so angegeben, dass er auf das Verzeichnis oh-my-zsh verweist:

Das wird sehr ärgerlich, weil ich jedes Mal, wenn ich eine neue Registerkarte öffne, erneut zsh eingeben muss (nebenbei ist es möglich, eine neue Registerkarte für mein aktuelles Arbeitsverzeichnis zu erhalten? Ich schreibe hauptsächlich Rails-Apps, also habe ich 2 -3 Fenster öffnen sich im selben Verzeichnis und es ist frustrierend, jedes Mal wieder in das CD-ROM zu wechseln. Gibt es einen einfachen Weg, um es automatisch zu starten, oh-my-zsh, wenn ich ein Terminal öffne, so dass ich nicht jedes Mal zsh eingeben muss?

BEARBEITEN

Ich habe oh-my-zsh automatisch nach Robbys Anweisungen auf Github installiert. Hier ist die .zshrc, die für mich erstellt wurde:

# Path to your oh-my-zsh configuration. export ZSH=$HOME/.oh-my-zsh  # Set to the name theme to load. # Look in ~/.oh-my-zsh/themes/ export ZSH_THEME="maran"  # Comment this out to disable weekly auto-update checks # export DISABLE_AUTO_UPDATE="false"  source $ZSH/oh-my-zsh.sh  # Customize to your needs... export PATH=/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr /local/bin:/usr/X11/bin:/usr/local/git/bin export GIT_EDITOR="mate -w" 

Ich habe versucht, die Standard-Shell so zu ändern, dass sie darauf verweist, aber dann wird die Fehlermeldung angezeigt, dass sie auf eine unzulässige Variable gesetzt wurde. Die $ HOME-Variable zeigt korrekt auf mein Home-Verzeichnis, scheint jedoch nicht zu laden, wenn ich bei der regulären zsh-Eingabeaufforderung zsh im Terminal eingebe.

BEARBEITEN

Hier ist die Ausgabe von pstree -wp $$

- + = 00001 root / sbin / launchd \ - + = 00066 waynemolina / sbin / launchd \ - + = 68844 waynemolina /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_704684 \ - + = 68845 root login -pfq waynemolina / bin / zsh \ - + = 68846 waynemolina -zsh \ - + = 68939 Waynemolina pstree -wp 68846 \ --- 68940 root ps -axwwo Benutzer 
1

4 Antworten auf die Frage

2
Chris Johnsen

In Version 10.4 hat das Terminal die Einstellung "Beim Erstellen eines neuen Terminalfensters" entweder verwendet /usr/bin/loginoder den Benutzer einen Befehl angeben lassen. Ich gehe davon aus, dass das Terminal in 10.5 etwas ähnliches hat.

Haben Sie etwa so etwas wie zsh -fden angegebenen Befehl, als zu verwenden /usr/bin/loginoder einen Aufruf von zsh ohne -f? Die -fOption bewirkt, dass zsh alle Startdateien außer /etc/zshenv(dh Ihre ignoriert ~/.zshrc) ignoriert .

Eine andere Möglichkeit, diese Einstellung zu überprüfen, könnte mit sein defaults read com.apple.Terminal Shell. Wenn eine Ausgabe angezeigt wird, haben Sie eine benutzerdefinierte Einstellung. Wenn es leer ist oder nicht existiert, verwenden Sie wahrscheinlich immer noch die Standardeinstellung /usr/bin/login.

Zum Hinzufügen bearbeitet:
In einer Ihrer Shells mit der Standardaufforderung (ein neues Terminalfenster oder eine neue Registerkarte) überprüfen Sie Folgendes:

  • Zeigt set -o | fgrep rcs"on" für norcs?
  • Zeigt [[ "$ZDOTDIR" -ef "$HOME" ]] || echo "ZDOTDIR=$ZDOTDIR"irgendetwas?

Wenn eine oder beide dieser Bedingungen erfüllt sind, müssen Sie feststellen, wo sie eingestellt sind. Beachten Sie, dass norcsmit einem der eingestellt werden kann set +o rcs, set -o norcs, setopt norcs, unsetopt rcs, oder set -f. Bei den Optionsnamen wird nicht zwischen Groß- und Kleinschreibung unterschieden. Unterstriche können an beliebiger Stelle eingefügt werden ( NO_rC___sist identisch mit norcs). Schauen Sie in /etc/zshenv, /etc/zprofile, /etc/zshrc, /etc/zlogin; und .zshenv, .zprofile, .zshrcund .zloginvon Ihrem ZDOTDIR Verzeichnis.

Es könnte auch nützlich sein, die vollen Abstammungs Ihrer „Standardeingabeaufforderung“ Schalen zu wissen ( pstree -wp $$wenn man pstreevon (zB) MacPorts ). Möglicherweise wird der normale 'rc'-Prozess durch etwas wie zsh -fin einer' rc'-Datei unterbrochen .

Gemäß den Einstellungen wurde / usr / bin / login verwendet, aber ich habe es in / bin / zsh geändert und es wird immer noch die "standard" -Zsh-Eingabeaufforderung ausgeführt und nicht meine erweiterte. Wayne Molina vor 15 Jahren 0
Ich habe beide Befehle ausprobiert, die Sie gepostet haben, rcs ist "off" und ZDOTDIR ist leer. Wayne Molina vor 15 Jahren 0
Meinen Sie damit, dass Sie "norcs off" sehen (was die Standardeinstellung ist und Ihre "rc" -Dateien verwendet werden sollten)? Die Debug-Echos, die Sie basierend auf Ryans Antwort eingegeben haben, scheinen auch darauf hinzuweisen, dass "norcs" für Ihren "New Tab" / "New Window" -Fall deaktiviert ist. Ich wollte nur klarstellen, da "rcs is off" ist, eigentlich das Gegenteil von "norcs is off". Chris Johnsen vor 15 Jahren 0
2
Ryan Thompson

Ich weiß nicht sehr viel darüber, wie Mac OS X mit Shells arbeitet, aber im Allgemeinen finde ich es hilfreich, einige Echoaussagen in meine Initialisierungsdateien zu streuen, um sicherzustellen, dass sie beschafft werden. In Ihrer .zshrc-Datei könnten Sie also eine Zeile einfügen, die besagt, dass echo "Loading .zshrc". Und so weiter. Das Vorhandensein oder Fehlen dieser Echoaussagen beim Starten einer neuen Shell (oder beim Öffnen einer neuen Registerkarte) sollte Ihnen bei der Diagnose des Problems helfen.

Es gibt zwei mögliche Lösungen für das Problem beim Verzeichniswechsel:
1. Verwenden Sie den Bildschirm und vergessen Sie die Registerkarten.
2. Schreiben Sie eine Funktion, um das aktuelle Verzeichnis irgendwo in eine Datei aufzunehmen, fügen Sie diese Funktion dann in Ihr precmd ein und fügen Sie in .zshrc eine Zeile hinzu, um diese Datei und die CD zu lesen. Um genauer zu sein (aber nicht getestet!):

PWD_SAVE_FILE="$HOME/.pwd_save" function savepwd { pwd > "$PWD_SAVE_FILE" }  function precmd { savepwd }  cd "`cat "$PWD_SAVE_FILE"`" 
+1 für die Echo-Debug-Technik; Stellen Sie sicher, dass Sie sie entfernen (oder auskommentieren), wenn Sie dies getan haben. Andernfalls kann die Echoausgabe von Nicht-Login-'rc'-Dateien (.zshenv, .zshrc und die globalen Entsprechungen) die Tools verwirren, die ssh-in ausführen, und direkt Befehle ausführen (zB rsync, git) Chris Johnsen vor 15 Jahren 0
Ich gab ein Echo aus und es wurde richtig ausgegeben, als ich eine neue Eingabeaufforderung lud. Es wird auch ausgeführt, wenn ich den Befehl "zsh" eingebe. Es wird also geladen, aber aus irgendeinem Grund wird die erweiterte Eingabeaufforderung erst angezeigt, wenn ich zsh manuell eingebe Wayne Molina vor 15 Jahren 0
Nun, ich habe eigentlich keinen Mac, also kann ich Ihnen nicht bei Mac-spezifischen Verrücktheiten helfen. Nur allgemeine Verrücktheit und möglicherweise Zsh-spezifische Verrücktheit. Ryan Thompson vor 15 Jahren 0
1
Anark

Ich hatte dieses Problem. Es lag an einem .zlogin in meinem Heimatverzeichnis. Einmal entfernte ich .zlogin oh mein zsh funktionierte

0
Dennis Williamson

Versuchen Sie, dies ~/.zshrczu Debuggingzwecken in Ihre Datei aufzunehmen:

Gleich nach dieser Zeile:

export ZSH=$HOME/.oh-my-zsh 

Stellen:

echo $HOME echo $ZSH