Zsh: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
KKeine Bearbeitungszusammenfassung
(stil, format, synt, artikelstil)
Zeile 1: Zeile 1:
Um mit dem Betriebssystem zu interagieren, und teilweise auch,
{{Artikelstil}}
damit das Betriebssystem selbst arbeiten kann,
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.
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.


==Vorteile==
==Vorteile==
Die Zsh hat viele Vorteile gegenüber anderen Shells:
Die Zsh hat viele Vorteile gegenüber anderen Shells:
*Schneller
*Schneller
*Verbesserte, intelligente Tab Vervollständigung
*Verbesserte, intelligente Tab Vervollständigung
Zeile 21: Zeile 15:


==Installation==
==Installation==
Die Zsh befindet sich in [extra] und lässt sich mit
Die Zsh befindet sich in [extra] und kann von dort mittels [[Pacman]] installiert werden.
  pacman -S zsh
 
installlieren.
pacman -S zsh
Weil die Standard Konfiguration ziemlich puristisch ist, kann man auf
 
eine fertige zurückgreifen, die von der Linux Distribution grml zur Verfügung
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:
gestellt wird. Inzwischen ist diese Konfiguration ebenfalls in [extra] zu finden:
 
  pacman -S grml-zsh-config
  pacman -S grml-zsh-config


==Optimal : Zsh als Standard Shell einstellen==
==Optimal : Zsh als Standard Shell einstellen==
Als erstes sollte man den vollständigen Pfad der ZSH herausfinden:
Als erstes sollte man den vollständigen Pfad der ZSH herausfinden:
  which zsh
  which zsh


Um die Standardshell für den aktuellen Nutzer zu wechseln, verwendet man
Um die Standardshell für den aktuellen Nutzer zu wechseln, verwendet man
folgenden Befehl:
folgenden Befehl:
  chsh -s /bin/zsh
  chsh -s /bin/zsh


==Hinweise zu der GRML Konfiguration==
==Hinweise zu der GRML-Konfiguration==
Die .zshrc sollte nicht bearbeitet werden, für eigene Einstellungen verwendet
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.  
man die Datei '''.zshrc.local'''
Befehle für eine Login Shell kann man unter '''.zprofile''' vornehmen. Einige Hinweise zur GRML-Konfiguration sind in den Weblinks zu finden
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 findet man hier :
http://grml.org/zsh/grmlzshrc.html
http://grml.org/zsh/grml-zsh-refcard.pdf


==History==
==History==
Die History der ZSH ist sehr mächtig. Vielleicht kennst du das Problem,
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.
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==
==Globbing==
Jeder verwendet es, aber nicht jeder ist sich dessen bewusst:
Jeder verwendet es, aber nicht jeder ist sich dessen bewusst, wenn man z.B {{ic|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:
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:


    /      directories
{{hc|Aus der zshexpn-Manpage|<nowiki>  /      directories
    .      plain files
  .      plain files
    @      symbolic links
  @      symbolic links
    =      sockets
  =      sockets
    p      named pipes (FIFOs)
  p      named pipes (FIFOs)
    *      executable plain files (0100)
  *      executable plain files (0100)
    %      device files (character or block special)
  %      device files (character or block special)
    %b    block special files
  %b    block special files
    %c    character special files
  %c    character special files
    r      owner-readable files (0400)
  r      owner-readable files (0400)
    w      owner-writable files (0200)
  w      owner-writable files (0200)
    x      owner-executable files (0100)
  x      owner-executable files (0100)
    A      group-readable files (0040)
  A      group-readable files (0040)
    I      group-writable files (0020)
  I      group-writable files (0020)
    E      group-executable files (0010)
  E      group-executable files (0010)
    R      world-readable files (0004)
  R      world-readable files (0004)
    W      world-writable files (0002)
  W      world-writable files (0002)
    X      world-executable files (0001)
  X      world-executable files (0001)
    s      setuid files (04000)
  s      setuid files (04000)
    S      setgid files (02000)
  S      setgid files (02000)
    t      files with the sticky bit (01000)
  t      files with the sticky bit (01000)


  print *(m-1)          # Files modified up to a day ago
print *(m-1)          # Files modified up to a day ago
  print *(a1)          # Files accessed a day ago
print *(a1)          # Files accessed a day ago
  print *(@)            # Just symlinks
print *(@)            # Just symlinks
  print *(Lk+50)        # Files bigger than 50 kilobytes
print *(Lk+50)        # Files bigger than 50 kilobytes
  print *(Lk-50)        # Files smaller than 50 kilobytes
print *(Lk-50)        # Files smaller than 50 kilobytes
   print **/*.c          # All *.c files recursively starting in $PWD
   print **/*.c          # All *.c files recursively starting in $PWD
  print **/*.c~file.c  # Same as above, but excluding 'file.c'
print **/*.c~file.c  # Same as above, but excluding 'file.c'
  print (foo|bar).*    # Files starting with 'foo' or 'bar'
print (foo|bar).*    # Files starting with 'foo' or 'bar'
  print *~*.*          # All Files that do not contain a dot
print *~*.*          # All Files that do not contain a dot
  chmod 644 *(.^x)      # make all plain non-executable files publically readable
chmod 644 *(.^x)      # make all plain non-executable files publically readable
  print -l *(.c|.h)    # Lists *.c and *.h
print -l *(.c|.h)    # Lists *.c and *.h
  print **/*(g:users:)  # Recursively match all files that are owned by group 'users'
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 }'<
echo /proc/*/cwd(:h:t:s/self//) # Analogous to >ps ax | awk '{print }'<</nowiki>}}


==Hashes==
==Hashes==
Eine weitere Funktion sind die Hashes.
Eine weitere Funktion sind die Hashes. Mit ihnen kann man sich viel lästige Tipparbeit ersparen. Ein neuer Hash wird folgendermaßen definiert:
Mit ihnen kann man sich viel lästige Tipparbeit ersparen.
Ein neuer Hash wird folgendermaßen definiert:


''hash -d foo=/path/to/directory''.
bash -d foo=/path/to/directory


Anstatt ''cd /path/to/directory'' muss man jetzt nur noch ''cd ~foo'' ausführen.
Anstatt {{ic|cd /path/to/directory}} muss man jetzt nur noch {{ic|cd ~foo}} ausführen. Für Superfaule: ein ~foo reicht bei gehashten Verzeichnissen sogar auch zum Wechseln des Verzeichnisses aus.
Für Superfaule : ein ~foo reicht bei gehashten Verzeichnissen sogar auch zum
Wechseln des Verzeichnisses aus.


==GRML-Tipp: Batterie==
==GRML-Tipp: Batterie==
Die GRML Konfiguration bietet auch die Anzeige des Ladestandes von der  
Die GRML Konfiguration bietet auch die Anzeige des Ladestandes von der Batterie an. Durch Einfügen von BATTERY=1 in die .zshrc.local kann dieses Feature aktiviert werden.
Batterie an.
Durch Einfügen von BATTERY=1 in die .zshrc.local kann dieses Feature aktiviert werden.


==Weblinks==
==Weblinks==
Zeile 120: Zeile 93:
* [http://grml.org/ Grml Live-CD] {{sprache|en}}
* [http://grml.org/ Grml Live-CD] {{sprache|en}}
* [http://grml.org/zsh/zsh-lovers.html ZSH-Lovers: Tips, Tricks und Beispiele] {{sprache|en}}
* [http://grml.org/zsh/zsh-lovers.html ZSH-Lovers: Tips, Tricks und Beispiele] {{sprache|en}}
* [http://grml.org/zsh/grmlzshrc.html Onlinedokumentation] {{sprache|en}}
* [http://grml.org/zsh/grml-zsh-refcard.pdf Referenzkarte] {{sprache|en}}
* http://strcat.de/zsh/ {{sprache|en}}
* http://strcat.de/zsh/ {{sprache|en}}



Version vom 28. Mai 2013, 04:58 Uhr

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.

Vorteile

Die Zsh hat viele Vorteile gegenüber anderen Shells:

  • Schneller
  • Verbesserte, intelligente Tab Vervollständigung
  • Verbessertes Globbing
  • Erweiterte Variablen/Array-Handhabung
  • Rechtschreibprüfung
  • Nachträglich ladbare Module
  • Individualisierbarer Prompt
  • Eine verbesserte History

Installation

Die Zsh befindet sich in [extra] und kann von dort mittels Pacman installiert werden.

pacman -S zsh

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

Optimal : Zsh als Standard Shell einstellen

Als erstes sollte man den vollständigen Pfad der ZSH herausfinden:

which zsh

Um die Standardshell für den aktuellen Nutzer zu wechseln, verwendet man folgenden Befehl:

chsh -s /bin/zsh

Hinweise zu der GRML-Konfiguration

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

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:

bash -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.

GRML-Tipp: Batterie

Die GRML Konfiguration bietet auch die Anzeige des Ladestandes von der Batterie an. Durch Einfügen von BATTERY=1 in die .zshrc.local kann dieses Feature aktiviert werden.

Weblinks