|
|||||
Info Person Gallery Computer Internet Fun Sonstiges Sitemap Suche Kontakt |
Submenu:
Quick-Index
Vorwort - Warum wurde diese Seite gemacht? - Fähigkeiten die an der Zsh faszinieren - Lokale Dateien - Literatur
Take a look at the zsh-lovers project!
Willkommen zur Zsh-Liebhaber-Seite! Diese Webpage war ursprünglich unter www.infodrom.north.de/~matthi/zsh/ erreichbar. Gemeinsam mit Matthias Kopfermann habe ich (Michael) diese Webpage hierher verlagert, verbessert und aktualisiert. Redundanzen zu Zsh - Generell sind durchaus möglich und nicht ungewollt. Über Feedback an zsh-liebhaber@michael-prokop.at freuen wir uns!
Begonnen: Fre Okt 17 13:00:00 CET 1997 Zuletzt editiert: Sat Aug 14 12:20:29 CEST 2004
Die Zsh (sprich Z-Shell) ist eine herausragende, aber im Verhältnis zur Bash ziemlich unbekannte Shell, also ein befehlsorientierter Eingabemechanismus, über den man vor allem Befehle unter Unix interaktiv eingeben und außerdem Befehle automatisieren und Abläufe programmieren kann. Sie ist im Falle der Zsh mit einer mächtigen Programmiersprache durchaus gleichzusetzen, wenn dabei auch kein Maschinencode erzeugt wird.
Wir halten die Zsh für herausragend in Benutzerfreundlichkeit und Mächtigkeit. Sie macht das Arbeiten auf der Kommandozeile zur Freude, besticht durch ungeheure Anpassungsfähigkeit und hilft, wenn man sich einmal wieder nicht genau an irgendwelche Optionen bei Befehlen erinnere. Zusätzlich kann sie vieles, was andere Shells nur durch externe Befehle möglich machen. Ich (Matthias) selber stieß beim Lesen der Linux-Gazette zum ersten Mal auf die Zsh. Ein Benutzer hatte dort in einer Email zum Thema "Umwandlung von großen Buchstaben von DOS-Dateien nach Linux" eine sehr einfache und kurze Lösung durch die Zsh berichtet (siehe unten). Genau dafür ist die Zsh wie geschaffen. Man kann damit Probleme mit wenigen Tastenanschlägen lösen.
Auf einer Homepage über unterschiedliche Shells las ich (Matthias), die Zsh könne wahrscheinlich mehr als der Autor selber wisse. Natürlich hat das seinen Preis in der Größe der Shell und in der Größe des Handbuchs. Puristen werden die Zsh wohl nicht unbedingt benutzen. Aber wer sagt denn, dass man nicht in einer Sache Purist und in einer anderen sehr großzügig oder gar verschwenderisch sein kann oder dass man nicht für bestimmte Aufgaben so und für andere anders verfährt, je nach Bedarf, Speicherplatz, Rechnergeschwindigkeit?
Hier findet sich die Beschreibung der Z-Shell vom ihrem ursprünglichen Autor Paul Falstad, der übrigens durch einen Zhong Shao (heute Professor in Yale) mit Benutzername zsh auf diesen Namen kam. :)
Der ursprüngliche Autor beschrieb 1991 die Vorzüge dieser 1990 begonnenen Shell. Trotz seines Alters kann dieser längere Artikel Neugier wecken. Zumindest bei Sven Wischnowsky, einem der wichtigsten Zsh-Entwickler seit 1992 (ihm verdankt die Zsh ihre Vervollständigungsmechanismen und vieles mehr) und 1997 bei mir (Matthias) und 2002 bei mir (Michael) war der Artikel der Anlass, auf die Z-Shell umzusteigen. Und die Shell hat heutzutage noch so viele praktische Fähigkeiten dazu bekommen!
Seit 1999 gibt es diesen neuen Zsh-Guide von Peter Stephenson, einem anderen wichtigen Entwickler der Z-Shell, der mit großer Liebe zum Detail, mit Witz und - wie wir finden - sehr verständlich auf die Zsh und ihre Möglichkeiten eingeht und von dem in naher Zukunft sogar ein gedrucktes Buch über diese Shell erscheinen soll!
Leider ist diese tolle Shell, die es gerade Anfängern so viel leichter machen könnte und Power-Usern eine Unzahl an Möglichkeiten bietet, z.B. in Linux-Kreisen relativ unbekannt, obschon sie erhebliche Vorteile gegenüber der Bash hat und gegenüber der Tcsh auch eine ziemlich große Ähnlichkeit mit der Ksh und der Bourne-Shell aufweist und sich auch fuer Skripte ausgesprochen gut eignet.
emulate sh
, die SH zu emulieren.
(siehe auch man zshbuiltins
unter emulate.)unsetopt
correct
) und die Vervollständigungen sind bis ins allerkleinste Detail
anpassbar.zcompile
in eine für den Computer
schneller zu lesende binäre Ausführungsform bringen. Dabei wird ein Word-Code ähnlich
dem Java-Bytecode erzeugt, nur, dass dabei words (2 Bytes) benutzt werden. So kann
man die Funktionen erheblich beschleunigen.a="ich hab nix gemacht.";a[1]='I';a[-1]='. (Bart Simpson)'
typeset -A ass_array; ass_array=(eins 1 zwei 2 drei 3 vier 4)deklariert und definiert eine auch Hash genannte Feldvariable, deren einzelne Elemente einen Index aus Buchstaben besitzen.
print $ass_array[eins]
gibt im Beispiel das erste Element, 1, aus,
print ${(k)ass_array}
gibt die Keys (Schlüssel),
print ${(v)ass_array}
die Values (Werte).
print ${$( date )[1]}gibt das erste Wort, was date liefert, aus. Dazu muss der Befehl
date
in $()
angegeben werden (die alte Bourne-Shell-Schreibweise innerhalb
von ``
funktioniert hier nicht!).$(date)
wird umschlossen von ${[1]}
, was das erste Wort
hervorbringt. Diese Konstruktion kann man beliebig verschachteln, was nur den
Nachteil besitzt, mit größerer Verschachtelungstiefe sehr unleserlich zu werden.
print ${${$( LC_ALL=de_DE /sbin/ifconfig ppp0 )[5]}#Adresse:}könnte bei Verwendung von pppd unter Linux die IP-Adresse ausgeben, wobei nebem dem eben gezeigten Mechanismus zusätzlich die Zeichenkette "Adresse:" gelöscht wird.
(f)
im
Index der unbenannten Variablen Verwendung findet. Dies führt dann dazu, dass
bestimmte Zeilen statt Buchstaben durch den Index ausgewählt werden:
print -l ${"$( < datei )"[(f)5]}gibt die Zeile 5 aus "datei" aus.
print ${"$( < /etc/passwd )"[(fr)*root*]}gibt die erste Zeile, in der "root" vorkommt aus, wobei in diesem Fall im Index nach einem Muster (hier: "*root*") mittels
(r)
gesucht wird.print -l ${(M)${(f)"$(< /etc/passwd)"##*$muster*}} (f)liest die in Anführungsstrichen stehende Ausgabe der Datei zeilenweise in eine unbenannte Variable. Wie auch in anderen Shells schneidet
##
am Anfang
*$muster*
ab.(M)
benutzt wird, werden alle Zeilen, bei denen das
Muster zutrifft, nicht abgeschnitten, sondern alleine ausgegeben. Das Gegenstück dazu
ist (R), was im vorigen Fall dann einem "grep -v" entspricht.#
angeben, würden die Sterne (Stellvertreter für 0 oder
mehr Zeichen) geizig - mit so wenig Zeichen wie möglich - ausgegeben. In diesem Fall
würde dann also nur $muster
selber ausgeben.print ${$( date )[2,4]}gibt vom zweiten bis vierten Wort das von "date" gelieferte Ergebnis aus. Oder es geht auch mit negativen Index:
print ${${:-eins zwei drei vier fuenf}[2,-2]}gibt als Ergebnis
zwei drei vier
aus. (':-
' ersetzt den
fehlenden Variablennamen hier wie bei der Bash durch seine Werte).print ${$(date)[4][1,5]}gibt die Uhrzeit von date ohne Sekunden aus.
pcre
kann die Zsh seit Version 4.1.1 Perls
reguläre Ausdrücke verarbeiten. Dazu lädt man mit zmodload zsh/pcre
das
PCRE-Modul ein, kompiliert dann einen beliebigen perlartigen regulären Ausdruck mit
Hilfe von pcre_compile
und verarbeitet anhand des Fehlercodes 1 bzw. 0
alles weitere. Beispiel:
pcre_compile '\s\d\.\d{3}\.\d{3} Euro' &&\ pcre_match ' 1.000.000 Euro'\ && echo "Trifft zu!" || echo "Trifft nicht zu!"Bei komplexeren Ausdrücken kann man die Geschwindigkeit noch durch pcre_study verbessern.
for Programm in cat tail head grep ; do >> /tmp/datei \ <<< "Hallo,Welt! Ich habe das Geüfhl, mein \ externes $Programm wird bald nicht mehr so viel benutzt." ; doneMan achte auch auf das Auslassen von cat, was bei der zsh nicht mehr nötig ist!
printf "%.0f\n" $[ 2.8*15 ]Ausserdem kann in verschiedenen Zahlensystemen gerechnet werden, in dem in eckigen Klammern
[#<zahlensystem>]
geschrieben wird, also:
for (( i=1; i<100; i++ )) { print $(( [#10] i)) }entspricht
$(( [#16] i )) }Bei zweifacher Angabe von
#
wird das Zahlensystem nicht ausgegeben.autoload
zcalc
zur Verfügung steht.zshcompctl
und seit 3.1.6 zshcompsys
.
(Programmierbare Vervollständigung ist für die Bash erst seit April 2000 (Version 2.04)
und bei der Ksh gar nicht vorhanden. Seit Zsh 4.1 können sogar die
Vervollständigungsmechanismen der Bash genutzt werden unter Verwendung von
bashcompinit.)autoload compinit &&
compinit
den neuen Mechanismus blind in Gang setzen und kann direkt
vorgefertigte Vervollständigungs-Mechanismen nutzen. Man rufe danach beispielsweise
einmal xterm -fn «TAB»
auf. (Siehe auch hier)compctl -g '*(/)' cdmacht aus einer einfachen Dateiergänzung wie der Ksh eine intelligente Vervollständigung für "cd", die nur noch Verzeichnisnamen aufführt.
compctl -k '(`aktion`)'
lassen sich
sehr praktische Vervollständigungsmechanismen erstellen.
Man kann sich so z.B. ohne Probleme bei Aufruf eines Email-Programmes nur
Email-Adressen und mit ftp nur FTP-Adressen vervollständigen lassen.
Außerdem kann man bei der Vervollständigung auch Dateienden
abschneiden lassen.
Das ist z.B. bei Java sehr praktisch.
compctl -g '*.class(:r)' java(Mehr Beispiele zur älteren Vervollständigung hier)
setopt extended_glob
ist folgendes machbar:
grep Wort *~(*.gz|*.bz|*.bz2|*.zip|*.Z)sucht 'Wort' nicht mehr in den komprimierten Dateien im Mail-Ordner.
~
bedeutet hier so viel wie "außer".ls ^(*.bz2|*.gz)Das
^
ist also das "NICHT", das Ausrufezeichen wird von der Zsh für alte
Befehle benutzt.^
und ~
lassen sich die Ausdrücke
#
und ##
benutzen, um null und mehr bzw. ein und mehr
Vorkommen des Zeichens davor zu erhalten, was bei Perls regulären Ausdrücken den
Zeichen *
bzw. +
entspricht. ;
als Aliase wirken können. Sie sollten gut gekennzeichnet werden:
alias -g §k="*~(*.bz2|*.gz|*.tgz|*.zip|*.z)"und danach der Befehl
ls -d §nklistet alle nicht-komprimierte Dateien auf.
unalias '§k'
wird man dieses globale Alias wieder
los. Wichtig hierbei sind die einfachen Anführungsstriche. Sonst wirkt nämlich §k
weiter, was nicht im Sinne des Benutzers wäre.alias -s NAME=WERTwobei TEXT.NAME dann durch die Zsh zu WERT TEXT.NAME wird.
alias -s txt='less -rE'ruft alle ohne Befehl aufgerufenen .txt-Dateien automatisch mit dem Befehl
less -rE
auf, so dass man jetzt einfach nur den Dateinamen und ein return
eingeben muss. Diese Funktionalität ist vergleichbar mit dem Anklicken einer oder
mehrerer Dateien mit einem graphischen Dateimanager. Dabei kann man auch globale
Zeichen wie *
verwenden, also beispielsweise *.txt
und ein
"enter" eingeben um alle Dateien mit Endung ".txt" mit less zu lesen.
autoload zsh-mime-setup ; zsh-mime-setup
die Möglichkeit, anhand der Mime-Definitionen in /etc/ schon bestimmte Datei-Endungen
mit bestimmten Programmen zu belegen.alias -s de=w3m alias -s at=w3mruft alle WWW-Seiten mit .de oder .at direkt mit w3m auf. ('.de' bzw. '.at' in der Eingabe ist in diesem Fall keine Dateiendung!)
begruessung() { echo "Hallo, $1" ; } herzlich() { echo "Ist ja riesig, $1, Dich zu sehen" ; }Jetzt muss noch dieser Dateiname mit
autoload dateiname
bekannt gemacht werden. Daraufhin stehen nach einmaligem Aufruf des Namens der
Funktionen die beiden Funktionen dann zur Verfügung. Schreibt man nur den
Funktionsrumpf allein dann hat das gegenüber dem Schreiben von Funktionen den Vorteil,
sofort ausgeführt werden zu können. autoload-Funktionen müssen nämlich erst einmal aufgerufen werden, damit ihr Rumpf bekannt ist. Beispiel:
echo "Ist das schön, $1, Dich zu sehen\!" > ~/.zsh/funktionen/begruessungist nach Aufruf von
autoload begruessung
sofort nutzbar. (Siehe
AUTOLOADING FUNCTIONS unter 'man zshmisc') typeset -T
ein "Gegenüber" von einer Skalar-Variable zu einer
Feld-Variable durch die Kleinschreibweise der Variablen zu erzielen.
alt: PATH=/usr/bin\ :/usr/local/bin/\ :/usr/sbin\ :/usr/local/sbin\ :/usr/X11R6/bin zsh: path=( /usr/bin /usr/local/bin /usr/sbin /usr/local/sbin /usr/X11R6/bin )Da die Zsh für Feldvariablen runde Klammern braucht (wenn nicht
setopt
shwordsplit
gesetzt ist) sind die Worte in runde Klammern eingeschlossen. setopt shwordsplit
setzen.bindkey
"^Xp" push-line-or-edit
oder ähnlicher Tastenbelegung diesen Puffer in einen
anderen Puffer kopieren oder aber nach einem Control-C erneut die Zeilen zurückholen.
klammer() { LBUFFER="\${$LBUFFER" ; RBUFFER="}$RBUFFER" }erzeugt eine Funktion klammer, die man mit
bindkey '^g' klammer
jetzt
an die Taste Control-G zuweisen kann.wohin() { dirs -v print -n "Wohin? " read WOHIN cd +${WOHIN:=0} }Jetzt muss mit '
zle -N
' "wohin" als User-Widget deklariert werden.
Anschließend kann mit 'bindkey '^Ww' wohin
' die definierte und deklarierte
Editier-Funktion auf 'Control-Ww
' gelegt werden.autoload zed
' sogar einen Editor (der in
der Z Shell selber geschrieben ist) benutzen, der dann von seiner Voreinstellung oder
durch 'bindkey -e
' Emacs-artig, bei Eingabe von 'bindkey -v
'
vi-artig funktioniert. Gesichert wird allerdings durch 'control-x control-w
'
oder im Vicmd-Modus mit 'ZZ
' und mit dem Befehl control-c bricht man ab.
Ruft man zed mit der Option -f oder als fned auf, kann man Funktionen
editieren.man zshzle
') |&
. print -p
' und mit
'>&p
' als Umlenkung kann ich Daten an den Prozeß senden und mit
'read -p und '<&p
' als Umlenkung Daten von diesem Prozeß
auslesen. Beispiel:
coproc ed /tmp/notizen print -p "a" ls -l >&p print -p ".\nwq"schreibt in einen parallel laufenden Koprozess, den altehrwürdigen Ed, die Ausgabe von '
ls -l
' und speichert den Inhalt in der Datei /tmp/notizen ab und beendet
ed. zmodload zsh/zpty
', welches dann ähnliche Steuerungsmöglichkeiten wie das
Programm expect bietet. Als Beispiel für die Verwendung von zpty kann das Skript
nslookup in /usr/share/zsh/4.x.x/functions/ dienen, was das gleichnamige interaktive
Programm durch seine Vervollständigung leichter bedienbar macht. typeset -L2 name=werteintrag ;print "[$name]"gibt linksformatiert "[we]" aus, die ersten 2 Buchstaben, umrahmt von [].
typeset -lL20 name=WERT;print "[$name]"gibt in Kleinbuchstaben (-l für lower) "[wert ]" aus, wobei 20 - 11 Leerzeichen eingefügt werden.
typeset -r RPROMPT=%nschützt den Rechtsprompt vor einem versehentlichen Überschreiben. Die Variable ist jetzt read-only und zsh warnt einen mit "zsh: read-only variable: RPROMPT ". Alle typeset-Befehle können mit einem
-
statt dem +
aufgehoben
werden. (Siehe man zshbuiltins
unter typeset)typeset
kann man auch durch sogenannte Modifier die Ausgabe
von print
verändern. Beispiel:
name="Wert" print "[${(Ll:20:)name}]"ergibt genau die selbe Ausgabe wie
typeset -lL20 nameSeit Zsh 4.1.1 kann man mit
printf "%20s\n" ${(L)a}ähnlich wie in der gleichnamigen C-Funktion auch dieses Ergebnis bekommen, ohne den externen printf-Befehl nutzen zu müssen.
man zshexpn
unter Glob Qualifier). Beispiele:
print -l *(m-1) # listet nur Dateien zeilenweise auf, die vor # bis zu einem Tag modifiziert wurden print -l *(a1) # listet Dateien zeilenweise auf, auf die vor einem # Tag zugegriffen wurde print -l *(@) # listet nur die Links zeilenweise auf ls -doF *(/) # findet nur die Verzeichnisse chmod 640 *(W) # verändert die Rechte aller Dateien, in die # jeder schreiben darf, denn das ist ja meistens # besonders riskant! grep name *(.) # findet nur noch reine Dateien. Damit ist # die unsinnige Meldung "grep: bla: Is a directory" # für alle Zeiten vermeidbar.Um einmal wieder an alte schlechtere Zeiten erinnert zu werden, könnte man auch '
grep name *(^.@)
' eingeben. Hiermit werden alle Dateien
aufgelistet, mit denen grep nichts anfangen kann, denn '^' ist das Nicht-Zeichen
:).gg() { grep -wE "$1" *(.) | less -r }könnte eine kleine Zsh-Funktion sein, um gezielt nach einem Wort und unter Zuhilfenahme von regulären Ausdrücken zu suchen. Ich persönlich (Matthias) benutze allerdings lieber Perl für solche Dinge und habe dafür das Perl-Programm
mg
entdeckt.
for i in [A-Z][A-Z]*(.); do mv $i ${i:l} ;doneDer Qualifier :l (für lowercase) leistet hier ganze Arbeit.
print -l *(LM+3)gibt zeilenweise Dateien aus, die über 3 Megabyte groß sind.
mutt -f =(zcat mailfold*.gz)In den =() steht dabei die Aktion, die mit einer Datei gemacht wird, es wird dabei eine temporäre Datei erzeugt und mit ihr z.B. mutt -f aufgerufen. Ein anderes Beispiel:
mutt -f =(grepmail "Mustafa Mustermann" ~/mbox)sucht alle Emails von Mustafa Mustermann aus einer sehr großen Email-Datei namens mbox mittels
grepmail
, einem sehr mächtigen Perl-Programm zum Herausfiltern von Emails,
welche einem bestimmten Kriterium entsprechen, heraus. Die temporäre Datei wird
selbstverständlich nachher wieder gelöscht.lynxbzgrep() { lynx -force_html -dump =(bzip2 -cd $1 | grep $2) }ermöglicht es, mit lynxbz bzip2-gepackte HTML-Seiten nach einem Begriff zu untersuchen. Nötig wird dieser Mechanismus, wenn ein Programm
lseek
benötigt. (Siehe
man 3 lseek
)<()
' verwenden. Damit erspart man sich dann die manuelle
Verwendung von /proc/self/fd
oder die manuelle Erzeugung einer "named
pipe":
lynx -force_html <( gzip -cd komprimiert.html.gz )ist ein Beispiel, bei dem lynx die Ausgabe von '
gzip -cd
komprimiert.html.gz
' verarbeitet. diff <(zcat erste_datei.gz) <(zcat zweite_datei.gz)vergleicht den Inhalt von zwei komprimierten Dateien miteinander.
< dateiunter less angucken. Einfach ein
<
vor die Datei setzen.ls >datei1 >datei2 >datei3oder:
ls >> datei1 >> datei2
less < datei1 < datei2
make >logfile | grep Error
ls -lL =emacs
kann man beispielsweise in jedem
Verzeichnis schauen, wie groß 'emacs' genau ist. Man muss nicht mehr den Pfad angeben.
Die Zsh schaut dabei selbst im Pfad nach, wenn man emacs im Pfad hat. Man kann auch
bequem Dateien, die im Pfad stehen, auf diese Art editieren.
jed =genial.ceditiert eine C-Funktion, wenn sie im Pfad gefunden werden kann.
print -l **/*.htmlfindet man alle HTML-Seiten, die in allen Verzeichnissen unterhalb des jetzigen Verzeichnisses vorhanden sind und gibt sie auf je einer Zeile (-l) aus.(**=Rekursion)
print -l **/datei.html # sucht die bestimmte Datei in allen # vom aktuellen Verzeichnis abgehenden # Verzeichnissen und gibt genau sie aus. print -l **/*.html~datei.html # gibt alle HTML-Seiten # mit Ausnahme von datei.html zeilenweise aus. grep name **/*.txt # sucht in allen Texten unterhalb des # gegenwärtigen Verzeichnisses nach Dateien # mit Endung .txt.
vared
kann man alle Umgebungsvariablen editieren. Das
finden wir praktisch, weil wir sofort die Variable erreichen und nicht erst in einer
Datei wie .zshrc nach ihr suchen müssen. Außerdem wirkt das Editieren der Variablen
natürlich sofort.dirs -v
zeigt alle Verzeichnisse, in denen man in
einer Sitzung gewesen ist zeilenweise an. Wenn man setopt autopushd
setzt, kann man nun mit cd +2 das vorletzte Verzeichnis erreichen.zza () { NAMED_DIRECTORY=$PWD:t; # der Name des jetzigen Verzeichnisses wird # an NAMED_DIRECTORY ohne die Hierarchie übergeben. # :t steht für tail. eval $NAMED_DIRECTORY=$PWD; # es findet die Setzung eines named directory statt. cd ~$NAMED_DIRECTORY; # es wird in das named directory gesprungen. # ist mit dem bestehenden Verzeichnis identisch # aber der Name ist kürzer im Prompt. }Eine außerdem sehr praktische Möglichkeit besteht darin, dass man jetzt nicht mehr den ganzen Pfadnamen angeben muss, wenn man eine Datei verschiebt. Z.B.:
mv datei.1 ~lm1könnte die Datei bequem nach /usr/local/man/man1/ verschieben, wenn man
lm1=/usr/local/man/man1
gesetzt hat.info=/usr/local/info/
Dann wird im Prompt der
ganze Name dargestellt. cd ~info
springt zwar nach /usr/local/info, aber
im Prompt steht:
/usr/local/info%Möchte man aber den kurzen Prompt haben, dann muss man so zuweisen:
info=/usr/local/info-also ohne Slash am Ende.
autocd
erlaubt es, nur den Namen eines Ordners
anzugeben. Bei Eindeutigkeit wird dann sofort in diesen Ordner gesprungen. Z.B.
springt bin «enter»
dann sofort in das bin-Verzeichnis.autoload -U colors && colors echo "$fg_bold[red]zsh $fg_no_bold[white]is $bg[blue]$fg_bold[green]nice"
RPROMPT=%l
zeigt beispielsweise an, auf welchem Rechner
man sich befindet.RPROMPT=%n
zeigt den Benutzer an.RPROMPT=%T
zeigt die Zeit an.RPROMPT=%D{%d.%m.%y}
zeigt das Datum nach deutscher Darstellung an.setopt autocorrectDie Korrektur kann durch Setzung eines
alias <befehl>=nocorrect <befehl>verhindert werden.
watch
wie unter der
Tcsh.watch=(notme)listet z.B. alle Benutzer auf, die nicht ich sind :)
WATCHFMT='%n eingeloggt auf Terminal %l von %M seit %T 'Wählt man
watch=(@vorsicht_ist_angesagt)
, so werden alle Benutzer
aufgeführt, die von dem Server vorsicht_ist_angesagt eingeloggt sind.watch=( < ~/.freunde root)liest alle Freunde aus der Datei
.friends
in das Feld watch zusätzlich zu
root ein. So kann man schnell erkennen, wenn sich Freunde einloggen.repeat
. Möchte man z.B. einen Werbemailer böswillig
strafen, dann könnte man das so machen:repeat 100 mail -s "spams suck" badcompany@devilsheart.com < flameDabei sollte allerdings bedacht werden, dass man damit meist harmlose Benutzer trifft, die schlechte Passworte haben und deshalb Räubern auf den Leim gegangen sind.
!?kommando
auf, hat man die
Möglichkeit, vor der erneuten Ausführung zu schauen, ob es sich hierbei auch um das
gewünschte Kommando handelt. Man drückt dazu einfach «TAB». Ebenso kann man sich auch
die genau betroffenen Dateien eines global wirkenden Befehles (z.B. 'ls *.html') mit
«TAB» ansehen.echo ein_langes_wort zweites_langes_wort drei !#1-2schreibt auf den Bildschirm: 'ein_langes_wort zweites_langes_wort drei ein_langes_wort zweites_langes_wort'.
periodic funct() PERIOD=300 fortune -sAnmerkung: Allerdings muss dazu auch am Prompt ein Befehl eingegeben werden, sonst kann man natürlich nichts auf dem Bildschirm sehen.
echo {1..7} "\nWo ist denn die Bash geblieben?"ergibt:
1 2 3 4 5 6 7 Wo ist denn die Bash geblieben?
alias run-help=man # ein -> alias run-help=infomacht.
man_zshall() man zshall # und nachfolgendes Deklarieren von zle -N man_zshall # kann durch Definition von bindkey '^g' man_zshall # nun immer bei Control-G ausgeführt werden.
sched
ist ein interner Befehl zum automatischen, zeitgebundenen
Abarbeiten von Kommandos ähnlich wie bei 'at'. Dabei werden die Kommandos
aber nicht ausgeführt und dann als E-Mail zugeschickt, sondern gelangen
erst einmal in den Puffer und werden beim nächsten Kommando erst
auf dem Bildschirm ausgegeben.
sched +0:10 figlet "Du musst jetzt los"führt in 10 Minuten in Großschrift auf dem Bildschirm eine Warnung zum Gehen aus. Dabei ist allerdings das Durchführen des Befehls abhängig von der Eingabe eines nächsten Befehls.
Diese Seite verlinken?
http://www.michael-prokop.at/computer/tools_zsh_liebhaber.html
Bekennender Zsh-Liebhaber? Nutze einen dieser Button:
Die Autoren dieser Webpage (Matthias Kopfermann und Michael Prokop) sind via zsh-liebhaber@michael-prokop.at erreichbar! Feedback ist willkommen!