Als Linux-Benutzer habe ich immer nur bash verwendet, da dies die Standardeinstellung für jede von mir verwendete Distribution war. Menschen, die andere Unix-Systeme wie BSD verwenden, scheinen weitaus häufiger andere Shells zu verwenden. Um ein bisschen mehr zu lernen, habe ich beschlossen, zsh auszuprobieren.
Als bash Benutzer:
- Welche Features werde ich vermissen?
- Und auf welche sollte ich achten?
Antworten:
Auf anderen Stack Exchange-Sites gab es bereits einige Aktivitäten zu diesem Thema. Soweit ich mich erinnern kann (es war vor Jahren²), habe ich beim Umstieg von bash auf zsh keine einzige Sache verpasst. Ich habe viel gewonnen; Ich denke, hier sind 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: Wenn Sie in zsh ein Verzeichnis ausführen, müssen Sie zu diesem wechseln, sofern Sie die
autocd
Option aktivierenEin weiteres sehr nützliches Feature ist das ausgefallene Globbing. Die
Hieroglyphensind etwas schwer zu merken, aber äußerst praktisch (da es oft schneller ist, sie nachzuschlagen, als den entsprechendenfind
Befehl zu schreiben ). Ein paar der einfacheren Beispiele:foo*~*.bak
= alle Übereinstimmungenfoo*
außer denen, die übereinstimmen*.bak
foo*(.)
= nur reguläre Dateienfoo*
foo*(/)
= nur Verzeichnisse, die übereinstimmenfoo*
foo*(-@)
= nur baumelnde symbolische Links, die übereinstimmenfoo*
foo*(om[1,10])
= die 10 neuesten Dateien, die übereinstimmenfoo*
foo*(Lm+1)
= nur Dateien mit einer Größe von> 1 MB = im Verzeichnis und all seinen Unterverzeichnisse, rekursiv⁴dir/**/foo*
foo*
dir
Für ausgefallene Umbenennungen kann das
zmv
eingebaute nützlich sein. Zum Beispiel, um allefile
zu kopierenfile.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
oderautoload -U compinit; compinit
). Zsh ist viel konfigurierbarer und generell schicker.Wenn Sie zsh ohne a ausführen
.zshrc
, wird ein interaktives Menü gestartet, in dem Sie Konfigurationsoptionen auswählen können. (Einige Distributionen deaktivieren dies möglicherweise; in diesem Fall führen Sie es ausautoload zsh-newuser-install; zsh-newuser-install
.) Ich empfehle, die empfohlenen Verlaufsoptionen zu aktivieren, die Vervollständigung (im „neuen Stil“) zu aktivieren und die „allgemeinen Shell-Optionen“ außer zu aktivierenbeep
. Konfigurieren Sie später weitere Optionen, sobald Sie diese entdecken.² Zu der Zeit war die programmierbare Vervollständigung das Killer-Feature von zsh, aber bash erwarb es bald darauf.
⁴ Funktionen, die bash nur in Version 4 erworben hat (daher auf vielen Systemen immer noch nicht verfügbar), sind kleiner.
quelle
autocd
oben beschriebene Funktion. Aktivieren Sie die Funktion mit dem Befehlshopt -s autocd
. Dann funktioniert die Funktion wie von Ihnen beschrieben.where
Befehl, nicht zu verwechseln mit demwhich
Befehl.-exec
einer Shell für Dinge wie Auswahl mite
und einer Pipeline in Tools wiesort
undsed
zum Umschreiben mite
und Sortieren). Natürlich viel ausführlicher.Auch die Standard-Tab-Vervollständigung ist besser als bash ... zum Beispiel ...
~/.e.d
TAB wird~/.emacs.d/
in zsh erweitert, Bash wird nur piepsen.quelle
setopt
Option verwenden Sie dafür (falls vorhanden)?_-.
als Wildcard gesetzt habe.zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
. Siehe stackoverflow.com/q/7906078/311660zsh
Mit dieser Option können Sie einen mehrzeiligen Befehl bearbeiten (siehe zsh-Zeileneditor ). Wenn Sie den gleichen Trick (Ctrl-p
) versuchen , ruft bash den letzten Befehl ab.quelle
Bash bietet die Möglichkeit, Ports über zu öffnen
oder
Es ist jedoch in Debian deaktiviert, da es als Hindernis angesehen wird (wenn der Pfad tatsächlich existiert) und außerhalb des Umfangs dessen, was eine Shell tun sollte. Weitere Informationen [Debian-Mailingliste]
quelle
Welche - in zsh verbessert
Der
which
Befehl in der Bash gibt nur die Position eines Befehls an.In Zsh
which
werden die Definition von aalias
, die Quelle für afunction
und die Position eines Befehls angezeigt .Nehmen wir an, wir hatten einen Shell-Alias:
In Bash, wenn wir fragten:
which gg
Das Ergebnis wäre ungültigIn Zsh:
which gg
geben uns ...Nehmen wir an, wir hatten eine Shell-Funktion:
In Bash, wenn wir fragten:
which hello
Das Ergebnis wäre ungültig.In Zsh:
which hello
geben uns ...quelle
type
(eingebauten) Befehl. Und nur um zu picken:which
ist ein externer Befehl, kein eingebauter Bash.zsh - eine komplette Shell
Es gibt viele, durchlesen
zshcontrib(1)
kann man zwei Versionen vonautoload
-fähigentetris
Spielen (die andere mitncurses
)zsh
im Wettbewerb mitemacs
, der Vollständigkeit halber (wie beschrieben) erkennen.=
Ich möchte das
=
Schlüsselwort erwähnen , das zu Irritationen führen kanncurl
( URLs sind normalerweise enthalten?var=val
; es ist jedochunsetopt
möglich, denke ich):q file =less
(gentoo
) löst aufq file $(which less)
=
wird auf den vollständigen Pfad des betreffenden Befehls erweitert.andere Leckereien
andere Dinge sind aus dem Kopf heraus die richtige Eingabeaufforderung
RPS1=%d
(um sie stilvoll anzuzeigen$PWD
), Alt + H(run-help
dhman
), Alt + ? (which-command
)vared
undzed
(autoload
Funktion), Emacs 'Minibuffer-ähnliches Alt + XAusführen von Widgets, ohne sie zu binden, globale Aliase und Suffix-Aliase. Ausgedehntes Verlaufsverfolgung Befehlsausführung Laufzeit,-m
und-regex
Matcher, Shell - Emulation (z. B.csh
,ksh
mitemulate
) undautoload
run-help
mit Dateiauszügen für die Einbauten.Wehklagen
Ich denke, die meisten, wenn nicht alle Funktionen wurden vor langer Zeit implementiert, und beim Durchlesen von Änderungsprotokollen gibt es keine größeren Änderungen und neuen Funktionen, was sehr traurig ist (nichts mehr zu erforschen und zu entdecken).
bash
scheint mehr werden verteilt inreadline
(im Gegensatz zuzle
und)gnu history
im Linux - Geist; Zum Beispiel können Readline-Funktionen und Tastenkombinationen global angewendet werden (wie in~/.inputrc
und beibehalten/etc/inputrc
), wenn sie nicht durch bash-spezifische überschrieben werdenbind
.Fazit
Ich persönlich denke
emacs
(vor allem aus der Perspektive des (aktuellen?)emacs-nox
Geschmacks), die Inspiration für die außergewöhnliche Software zu sein,zsh
undtmux
habe sehr gute Arbeit geleistet, um ein Beispiel für eine solche Implementierung zu sein. Für die Menschen, die es zu schätzen wissen (bis zu dem Grad, dass sie es nicht brauchen / abhängig vomX
Server). Die Unix-Shell ist leistungsfähig genug und ihre Kontinuität und Konsistenz sind ausreichend für einen ordnungsgemäßen Workflow und die Produktivität (im gesamten Computing).quelle