Lohnt es sich, für den gelegentlichen Gebrauch auf zsh zu wechseln? [geschlossen]

192

Die Standard-Shell in Mac OS X ist bash, die ich im Allgemeinen gerne verwende. Ich halte das für selbstverständlich. Es wäre wirklich schön, wenn es automatisch mehr Sachen vervollständigen würde , und ich habe zshin dieser Hinsicht gute Dinge darüber gehört . Aber ich habe nicht wirklich die Neigung, stundenlang an Einstellungen herumzuspielen, um meine Befehlszeilennutzung um einen winzigen Betrag zu verbessern, da mein Leben in der Befehlszeile nicht so schlecht ist.

(Soweit ich weiß, bashkann es auch so konfiguriert werden, dass es intelligenter automatisch vervollständigt wird. Es ist die Konfiguration, an der ich nicht besonders interessiert bin.)

Wird der Wechsel zu zsh, auch in wenigen Fällen, mein Leben leichter machen? Oder ist es nur eine bessere Hülle, wenn Sie sich die Zeit nehmen, um zu erfahren, warum es besser ist? (Beispiele wären auch schön :))


@ Rodney Amato & @ Vulcan Eager geben zwei gute Gründe an, sich daran zu halten bzw. zu bashwechseln zsh. Sieht so aus, als müsste ich beides untersuchen! Naja:)

Gibt es jemanden mit einer Meinung von beiden Seiten des Arguments?

Will Robertson
quelle
14
Da zsh (fast) eine Obermenge von bash ist, können Sie damit beginnen, zu zsh zu wechseln und es wie bash zu verwenden. Dann können Sie die zsh-Edelsteine ​​ein wenig nach dem anderen lernen.
Orip
Wenn Sie ein wenig Bash-Anpassung haben und häufig die Shell in Emacs verwenden, scheint dies nicht trivial zu sein. Ich habe eine verwandte Frage gepostet: stackoverflow.com/questions/13326879/…
justingordon
Das einzige, was ich an zsh nicht mag, ist, dass Sie es (zumindest unter Ubuntu) beim ersten Start selbst konfigurieren müssen (anstatt einige vernünftige Standardeinstellungen bereitzustellen, mit denen Sie später basteln können). Wenn Sie darüber hinwegkommen können, ist zsh das Beste!
Zrajm

Antworten:

68

Für den gelegentlichen Gebrauch ist es wahrscheinlich besser, sich an die Bash zu halten und nur die Bash-Fertigstellung zu installieren.

Die Installation ist ziemlich einfach. Holen Sie sich das Bash-Completion-20060301.tar.gz von http://www.caliban.org/bash/index.shtml#completion und extrahieren Sie es mit

tar -xzvf bash-completion-20060301.tar.gz

Kopieren Sie dann die Datei bash_completion / bash_completion nach / etc mit

sudo cp bash_completion/bash_completion /etc

Hier werden Sie zur Eingabe Ihres Passworts aufgefordert. Sie werden wahrscheinlich ein Verzeichnis /etc/bash_completion.d für zusätzliche Abschlussskripte erstellen wollen (zum Beispiel habe ich dort das Git-Abschlussskript).

Sobald dies erledigt ist, müssen Sie im letzten Schritt sicherstellen, dass die Datei .bash_profile in Ihrem Home-Verzeichnis vorhanden ist

if [ -f /etc/bash_completion ]; then
     . /etc/bash_completion 
fi

darin, um die Abschlussdatei zu laden, wenn Sie sich anmelden.

Um es zu testen, öffnen Sie einfach ein neues Terminal und versuchen Sie, es auf Lebensläufen abzuschließen. Es sollte Ihnen die Lebenslauf-Optionen in der Liste der Abschlüsse anzeigen.

Rodney Amato
quelle
Ich habe das oben genannte versucht, aber danach, wenn ich Bash starte, bekomme ich 4 "unäre Operator erwartet" und 4 "zu viele Argumente" Fehler.
AnnanFay
12
Wenn Sie Homebrew unter OSX verwenden, können Sie es ausführen brew install bash-completion.
Nathan Villaescusa
3
Bash-Completion2 ist besser! Unter OS X:brew tap homebrew/versions; brew install bash-completion2
Zearin
85

Ich persönlich liebe zsh.

Im Allgemeinen werden Sie den Unterschied zwischen Bash und Bash wahrscheinlich erst bemerken, wenn Sie schnell Dinge wie rekursives Globbing ausführen möchten:

  • **/*.c beispielsweise.

Oder verwenden Sie Suffix-Aliase, um bestimmte Progs mit verschiedenen Suffixen zu verknüpfen, sodass Sie sie direkt "ausführen" können. Mit dem folgenden Alias ​​können Sie eine C-Quelldatei an der Eingabeaufforderung durch einfaches Eingeben "ausführen" ./my_program.c- was genau so funktioniert, als ob Sie es eingegeben hätten vim ./my_program.c. (Entspricht dem Doppelklick auf das Symbol einer Datei.)

  • alias -s c=vim

Oder drucken Sie die Namen der heute geänderten Dateien aus:

  • print *(e:age today now:)

Sie können wahrscheinlich all diese Dinge in Bash tun, aber meine Erfahrung mit zsh ist, dass ich es wahrscheinlich bei zsh-Liebhabern finden kann, wenn ich etwas tun möchte . Ich finde auch das Buch ' From Bash to Z-Shell ' wirklich nützlich.

Es macht auch Spaß, mit dem Verstand zu spielen, der unglaublich viele Optionen bietet!

Matt
quelle
1
Die ersten beiden Beispiele hier bedeuten mir nichts (ein gelegentlicher Bash-Benutzer, der überlegt, auf zsh umzusteigen) - könnten Sie näher erläutern, was "rekursives Globbing" bedeutet oder was Sie unter "Verknüpfen bestimmter Progs mit unterschiedlichen Suffixen" verstehen?
Aaronsnoswell
5
@aaronsnoswell: "Rekursives Globbing" bedeutet, dass ein Unterverzeichnis und alle seine Unterverzeichnisse nach Dateien durchsucht werden, deren Namen einem bestimmten Muster entsprechen. Bash macht das standardmäßig nicht. Sie würden findoder locaterekursiv suchen. Sobald Sie jedoch ein anderes Programm die Suche durchführen lassen, verlieren Sie die Grenzen zwischen den Namen (sofern Sie nicht vorsichtig sind) sowie den Zugriff auf die internen Globbing-Fähigkeiten der Shell und müssen im Grunde entweder mit dem auskommen, was das andere Programm bietet. oder leiten Sie seine Ausgabe durch ein Programm wie grep, awkoder sed(alle ziemlich komplex für sich).
CHao
6
Heutzutage können Sie die globstarOption in Bash festlegen , um eine rekursive Suche wie oben erwähnt zu ermöglichen. Ziemlich sicher, dass dies nicht der Fall war, als diese Antwort geschrieben wurde.
CHao
Mit glob_star_shortin zshkönnen Sie jetzt tun **.c, was als interpretiert wird **/*.c.
PythonNut
Ich benutze zsh 5.3und bekomme command not found: agemitprint *(e:age today now:)
Timo
38

Wechseln Sie zu zsh. Sie haben Zugriff auf:

  1. zmv: Sie können tun: zmv '(*).mp3' '$1.wma'für Tausende von Dateien.
  2. zcalc: Extrem komfortabler Taschenrechner, besser als bc.
  3. zparseopts: Einzeiler zum Parsen beliebiger komplexer Optionen für Ihr Skript.
  4. autopushd: Sie können jederzeit popdnachher cdzu Ihrem vorherigen Verzeichnis zurückkehren.
  5. Gleitkomma-Unterstützung. Es wird von Zeit zu Zeit benötigt.
  6. Hashes Unterstützung. Manchmal sind sie nur ein Schlüsselmerkmal.
Zearin
quelle
17
Das Beispiel für zmv sollte zmv '(*). Mp3' '$ 1.wma' sein. Bitte korrigieren Sie es, eine solche nachlässige Präsentation kann für Unerfahrene verwirrend und frustrierend sein.
Qed
5
@TravisBear autoload zcalc; zcalc(obwohl ich selbst nur tippe, pythonwenn ich einen Taschenrechner brauche).
Francisco
9
"autopushd: Sie können immer popd nach cd ausführen, um wieder in Ihr vorheriges Verzeichnis zu wechseln." Ist das nicht das Äquivalent von nur CD -?
Minhaz1
4
zmvund zcalcsind nicht sofort verfügbar. Es ist nicht klar, dass zmvnur Dateien umbenannt werden. Ich dachte, Sie hätten das Format möglicherweise konvertiert. Ich weiß nicht, was "Hashes" -Unterstützung überhaupt bedeutet. Dieser Beitrag scheint nur für Leute "nützlich" zu sein, die zsh bereits kennen.
Mpen
1
@Mark In diesem Fall ist "Hash" gleichbedeutend mit "assoziatives Array". bash4 wurde nur wenige Monate vor dieser Antwort veröffentlicht.
chepner
13

Wenn Sie ZSH nur für eine bessere Vervollständigung verwenden möchten, ist die Konfiguration ziemlich einfach. Platziere dies in deinem ~ / .zshrc:

autoload -U zutil      # [1]
autoload -U compinit   # [2]
autoload -U complist   # [3]
compinit

Es lohnt sich jedoch, alle anderen großartigen Funktionen des ZSH zu prüfen. Das obige Beispiel gibt Ihnen eine ziemlich einfache Eingabeaufforderung mit guter Fertigstellung. Wenn Sie nicht mit Konfigurationen herumspielen möchten, aber sehen möchten, was ZSH für Sie tun kann, Google für "zshrc", und Sie werden einige einsatzbereite Konfigurationen für den Einstieg bereitstellen.

jkramer
quelle
3
Für welche Art von Dingen wird dies die Vervollständigung hinzufügen? Ich mag es nicht, Dinge zufällig hinzuzufügen, ohne zu wissen, was es tut.
Mpen
6

zsh hat eine Konsolen-GUI-Konfigurationssache. Sie können es ziemlich schnell und einfach einrichten, ohne mit Konfigurationsdateien herumspielen zu müssen. Ich glaube nicht, dass Sie viel Zeit brauchen werden, um es einzurichten, wahrscheinlich 10 Sekunden, wenn Sie nur die Standardeinstellungen verwenden. Probieren Sie es also aus.

Staale
quelle
10
Wie greifen Sie auf diese "Konsolen-GUI" zu?
Mpen
Es ist normalerweise das erste, was Sie sehen, wenn Sie zshohne zugehörige Punktedateien laden. Um es manuell zu bekommen, versuchen Sieautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Adam Katz
3

Staale spricht von einem Assistenten-ähnlichen Programm (CUI), das beim ersten Ausführen von zsh automatisch ausgeführt wird. Beantworten Sie einfach einige Fragen, zeigen / ändern Sie die Standardeinstellungen und die für Sie konfigurierten.

IBM developerWorks verfügt über hervorragende Ressourcen für zsh.

Ich habe keine sehr fortgeschrittenen Funktionen verwendet und bin bisher nicht auf ernsthafte Unterschiede gestoßen, die jemanden behindern sollten, der von Bash kommt.

Einige Beispiele:

  • !? pattern <Tab> wird automatisch zum letzten Befehl im Verlaufsabgleichsmuster vervollständigt. Sehr hilfreich.

  • Sie können eine Eingabeaufforderung auf der rechten Seite konfigurieren. Eine Verwendung besteht darin, eine Eingabeaufforderung mit fester Breite auf der linken Seite beizubehalten, damit alle Befehle gut ausgerichtet sind, während das pwd (oder etwas mit variabler Breite) als Eingabeaufforderung auf der rechten Seite angezeigt wird.

  • Sie können Eingaben aus mehreren Dateien umleiten (dies muss noch versucht werden): cat <file1 <file2 <file3

Agnel Kurian
quelle