GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Welche Funktionen sind in Zsh und fehlen in Bash oder umgekehrt?

Als Linux-Benutzer habe ich immer nur bash verwendet, weil es die Standardeinstellung für jede von mir verwendete Distribution war. Leute, die andere Unix-Systeme wie BSD verwenden, scheinen andere Shells viel häufiger zu verwenden. Um etwas mehr zu lernen, habe ich mich entschieden, zsh auszuprobieren.

Als Bash-Benutzer:

  • Welche Funktionen werde ich vermissen?
  • Und auf welche sollte ich achten?

Akzeptierte Antwort:

Für eine ausführlichere Antwort lesen Sie https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh/361957#361957

Auf anderen Stack Exchange-Sites gab es bereits einige Aktivitäten zu diesem Thema. Meine Erfahrung mit dem Wechsel von bash zu zsh, soweit ich mich erinnern kann (es ist Jahre her²), ist, dass ich nichts vermisst habe. Ich habe viel gewonnen; Hier sind meiner Meinung nach die einfachen zsh-spezifischen Funktionen, die ich am häufigsten verwende:

  • Die zsh-Funktion, die ich am meisten vermisse, wenn ich gelegentlich bash verwende, ist autocd:In zsh bedeutet das Ausführen eines Verzeichnisses, dorthin zu wechseln, vorausgesetzt, Sie aktivieren autocd Option.⁴

  • Ein weiteres sehr nützliches Feature ist das ausgefallene Globbing. Die Hieroglyphen Zeichen sind etwas schwer zu merken, aber äußerst praktisch (wie in, es ist oft schneller, sie nachzuschlagen, als das entsprechende find zu schreiben Befehl). Einige der einfacheren Beispiele:
        foo*~*.bak =alle Übereinstimmungen für foo* außer denen, die mit *.bak übereinstimmen
        foo*(.) =nur reguläre Dateien, die foo* entsprechen
        foo*(/) =nur Verzeichnisse, die foo* entsprechen
        foo*([email protected]) =nur baumelnde symbolische Links, die foo* entsprechen
        foo*(om[1,10]) =die 10 neuesten Dateien, die mit foo* übereinstimmen
        foo*(Lm+1) =nur Dateien mit einer Größe> 1 MB
        dir/**/foo* =foo* im Verzeichnis dir und alle seine Unterverzeichnisse, rekursiv⁴

  • Für ausgefallene Umbenennungen ist die Datei zmv eingebaut kann praktisch sein. Zum Beispiel, um jede file in file.bak :zmv -C '(*)(#q.)' '$1.bak'

  • Sowohl bash als auch zsh haben ein anständiges Vervollständigungssystem, das explizit aktiviert werden muss (. /etc/bash_completion oder autoload -U compinit; compinit ). Zsh ist viel konfigurierbarer und im Allgemeinen ausgefallener.

Wenn Sie zsh ohne .zshrc ausführen , wird ein interaktives Menü gestartet, in dem Sie Konfigurationsoptionen auswählen können. (Einige Distributionen können dies deaktivieren; führen Sie in diesem Fall autoload zsh-newuser-install; zsh-newuser-install aus .) Ich empfehle, die empfohlenen Verlaufsoptionen zu aktivieren, die Vervollständigung („im neuen Stil“) einzuschalten und die „allgemeinen Shell-Optionen“ mit Ausnahme von beep einzuschalten . Konfigurieren Sie später weitere Optionen, sobald Sie sie entdecken.

Siehe auch:Was bedeutet „>/dev/null 2>&1“ in diesem Artikel über Crontab-Grundlagen?

²Zu der Zeit war die programmierbare Vervollständigung das Killer-Feature von zsh, aber bash erwarb es bald danach.
Funktionen, die bash nur in Version 4 erworben hat (also zum Zeitpunkt der Veröffentlichung dieser Antwort nicht allgemein verfügbar waren und auf der vom System bereitgestellten bash unter macOS nicht verfügbar sind) sind in kleinerer Schrift.


Linux
  1. Welche Befehle fehlen in Ihrer bashrc-Datei?

  2. Unterschied zwischen ' und ' in der Befehlszeile (bash)??

  3. Alle Texte von Großbuchstaben in Kleinbuchstaben und umgekehrt umwandeln?

  4. Was sind die Worttrennzeichen von Readline?

  5. Was sind die grundlegenden Unterschiede zwischen den Mainstream-*nix-Shells??

Was ist Intel SGX und was sind die Vorteile?

Was ist Hypervisor und welche Typen gibt es?

Welche Vorteile sehe ich bei einem Upgrade von 14.04 auf 15.04 und was sind einige Vorbehalte?

Was ist Zsch? Sollten Sie es verwenden?

Was ist eine verteilte Datenbank und wozu dienen verteilte Datensysteme?

Fehlende Pfade aus dem Bash-Array von Pfaden extrahieren