Zsh
Dieser Artikel oder Artikelabschnitt bedarf einer stilistischen Überarbeitung laut Empfehlungen in Artikelstil.
Um mit dem Betriebssystem zu interagieren, und teilweise auch, damit das Betriebssystem selbst arbeiten kann, bedarf es eines Interpreter-Programms, dass die eingegebenen Befehle an das System weiterreicht. Unter Unix, und Unix-verwandten Systemen wird dieser Kommandozeileninterpreter Shell genannt. Unter Arch ist diese Shell standardmäßig die bash. Eine Alternative ist die sog. Zsh ("Z-Shell"), die 1990 von Paul Falstad an der Princeton University geschrieben wurde.
Die Zsh bietet viele Vorteile gegenüber anderen Shells, vorallem Bash:
- Verbesserte, intelligente Tab-Vervollständigung
- Verbessertes Globbing
- Erweiterte Variablen- und Array-Handhabung
- Rechtschreibprüfung
- Nachträglich ladbare Module
- Individualisierbarer Prompt
- Eine verbesserte History
Installation
Das Programm ist als
zsh
in extra
verfügbar, und kann von dort
mittels Pacman
installiert werden.
Konfiguration
Zuerst sollte man sichergehen, dass Zsh richtig installiert wurde, indem man folgenden Befehl ausführt:
zsh
Es sollte nun der Einrichtungsassistent zsh-newuser-install erscheinen. Um die Einrichtung zu überspringen, kann man q
drücken. Falls der Einrichtungsassistent nicht angezeigt wurde kann man ihn wie folgt manuell ausführen:
zsh /usr/share/zsh/functions/Newuser/zsh-newuser-install -f
Alternativ kann man die Konfiguration von grml verwenden:
Konfiguration von grml nutzen
Weil die Standardkonfiguration ziemlich puristisch ist, kann man auf eine fertige zurückgreifen, die von der Linux Distribution grml zur Verfügung gestellt wird. Inzwischen ist diese Konfiguration ebenfalls in [extra] zu finden:
pacman -S grml-zsh-config
Die .zshrc sollte nicht bearbeitet werden, für eigene Einstellungen verwendet man die Datei .zshrc.local Falls man einige Einstellungen verändern will, kann man diese auch in .zshrc.pre schreiben, die grml Einstellungen werden dann überschrieben. Befehle für eine Login Shell kann man unter .zprofile vornehmen. Einige Hinweise zur GRML-Konfiguration sind in den Weblinks zu finden
Zsh als Standardshell einstellen
Um Zsh für den aktuellen Benutzer als Standardshell einzurichten, kann man den folgenden Befehl verwenden:
chsh -s /bin/zsh
Funktionen
History
Die History der ZSH ist sehr mächtig. Vielleicht kennst du das Problem, dass du mehrere Shells offen hast, und du dann den Befehl $foo1, den du in der ersten Konsole eingegeben hast, auch in die zweiten Shell haben willst. Die ZSH liest die History immer wieder neu ein, d.h du musst nur einmal Enter drücken und die History von der ersten Konsole ist auch auf der zweiten verfügbar. Es kann auch eine History von nur einem einzelnen Befehl aufgerufen werden. Nach Eingabe des Befehles reicht ein Drücken der PfeilAuf oder Ab Taste aus.
Globbing
Jeder verwendet es, aber nicht jeder ist sich dessen bewusst, wenn man z.B ls *txt
ausführt, hat man Globbing verwendet. Globbing von der Zsh ist aber noch sehr viel mächtiger: H-Glob gibt Auskunft über die verschiedenen Möglichkeiten:
Aus der zshexpn-Manpage
/ directories . plain files @ symbolic links = sockets p named pipes (FIFOs) * executable plain files (0100) % device files (character or block special) %b block special files %c character special files r owner-readable files (0400) w owner-writable files (0200) x owner-executable files (0100) A group-readable files (0040) I group-writable files (0020) E group-executable files (0010) R world-readable files (0004) W world-writable files (0002) X world-executable files (0001) s setuid files (04000) S setgid files (02000) t files with the sticky bit (01000) print *(m-1) # Files modified up to a day ago print *(a1) # Files accessed a day ago print *(@) # Just symlinks print *(Lk+50) # Files bigger than 50 kilobytes print *(Lk-50) # Files smaller than 50 kilobytes print **/*.c # All *.c files recursively starting in $PWD print **/*.c~file.c # Same as above, but excluding 'file.c' print (foo|bar).* # Files starting with 'foo' or 'bar' print *~*.* # All Files that do not contain a dot chmod 644 *(.^x) # make all plain non-executable files publically readable print -l *(.c|.h) # Lists *.c and *.h print **/*(g:users:) # Recursively match all files that are owned by group 'users' echo /proc/*/cwd(:h:t:s/self//) # Analogous to >ps ax | awk '{print }'<
Hashes
Eine weitere Funktion sind die Hashes. Mit ihnen kann man sich viel lästige Tipparbeit ersparen. Ein neuer Hash wird folgendermaßen definiert:
hash -d foo=/path/to/directory
Anstatt cd /path/to/directory
muss man jetzt nur noch cd ~foo
ausführen. Für Superfaule: ein ~foo reicht bei gehashten Verzeichnissen sogar auch zum Wechseln des Verzeichnisses aus.
Tipps
Grml Batterie
Die GRML Konfiguration bietet auch die Anzeige des Ladestandes von der Batterie an. Durch Einfügen von GRML_DISPLAY_BATTERY=1 in die .zshrc.local kann dieses Feature aktiviert werden.
Eigene Funktionen mit sudo
Eigene Funktionen können nicht einfach so sudo benutzen. Dafür muss der Zsh mit emulate -L zsh
mitgeteilt werden, dass sie sich selbst emulieren soll.
Deinstallation
Achtung: Es ist drigend erforderlich vor der Deinstallation die Standardshell zu ändern. Tut man dies nicht, hat man nach der Deinstallation von Zsh keinen Zugriff auf eine funktionsfähige Shell mehr. Um Bash als Standardshell einzurichten, kann man den folgenden Befehl ausführen:
chsh -s /bin/bash
Falls auch noch andere Benutzer außer der Eigene die Zsh benutzen, muss man deren Shell auch ändern (root Zugriff erforderlich):
chsh -s /bin/bash Benutzer
Nun kann man das Zsh Paket wie gewohnt entfernen.