http://www.guckes.net/talks/zsh/zsh_featurama_show.2008-03-02.txt Latest change: Tue Mar 11 04:06:26 CET 2008 ____ ___ _ _ _ |_ /___ / __|| |_ ___ | || | / /|___|\__ \| ' \ / -_)| || | /___| |___/|_||_|\___||_||_| -------------------------------------------------------------------------------- "Zsh - Schneller auf der Kommandozeile" Sven Guckes chemnitz2008@guckes.net Sonntag 2. Maerz 2008 16:00 Raum V6 http://chemnitzer.linux-tage.de/2008/vortraege/detail.html?idx=181 Chemnitzer Linux-Tage 2008 http://Chemnitzer.Linux-Tage.de -------------------------------------------------------------------------------- * Willkommen! Danke! * grml - zsh default shell * feature show -> keine folien. * kein workshop -> keine tasten. * Ziel: Appetit machen; hoffentlich dann mehr Installationen * Attention! bitte aufpassen - und Fragen im Anschluss stellen * Praesentation in screen im "split view" -------------------------------------------------------------------------------- * Modularitaet Moduln zum Zuschmeissn (zB ftp client) * Erweiterte Aliase - Suffix Alias $ emacs dateiname $ $EDITOR datei $ alias e=$EDITOR $ alias e=jed zsh> alias -s txt=vim zsh> towel.txt zsh> t*t zsh> alias -s html=links zsh> alias -s com=links zsh> alias -s net=links zsh> alias -s org=links zsh> alias -s de=links zsh> google.com zsh> guckes.net zsh> vim.org zsh> wikipedia.de * Erweiterte Aliase - Globale Aliase ... = Kommandovervollständigungen * Kommandovervollständigung für mutt zsh> mutt - * Kommandovervollständigung für gpg (long option names) zsh> gpg --help | grep -- --g --gen-key generate a new key pair --gen-revoke generate a revocation certificate ausserdem gibt es mehr als nur "--gen-key" und "--gen-revoke"! man sehe sich das manual an: $ man gpg G -- '^ *--g' --gen-key Generate a new key pair. This command is normally only used --gen-revoke name --gen-random 0|1|2 [count] --gen-prime mode bits [qbits] --gpg-agent-info --gnupg Use standard GnuPG behavior. This is essentially --group name=value1 [value2 value3 ...] sieben optionen! zsh> gpg --g --gen-key -- generate a new pair key --gen-revoke -- generate a revocation certificate --gen-prime --gen-random --group Eigene Vervollstaendigungen definieren: xpdf nur mit *.pdf dateien: zsh> compctl -g '*.pdf' xpdf pdf2ps lt (linuxtage): zsh> events=(augsburg berlin bonn brandenburg chemnitz dresden essen f* giessen magdeburg ...) zsh> compctl -k events lt (und noch ein killer feature!) Kommandovervollständigung für kill: kill * Inline Expansion echo *chemnitz* zsh> echo $P PAGER POSTEDIT PROMPT PROMPT3 PS1 PS3 PSVAR PATH PPID PROMPT2 PROMPT4 PS2 PS4 PWD zsh> echo $PA PAGER PATH zsh> echo $PATH /home/www/guckes/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games zsh> echo $path /home/www/guckes/bin /usr/local/bin /usr/bin /bin /usr/bin/X11 /usr/games zsh> !! echo $path /home/www/guckes/bin /usr/local/bin /usr/bin /bin /usr/bin/X11 /usr/games zsh> vared $PATH [ZEIT? ssh -h hostname -l loginname] * Key Binding zsh> mv foo{,.txt} zsh> mv foo foo.txt zsh> mv somelongfilename.txt , zsh> mv somelongfilename.txt somelongfilename.txt zsh> bindkey G , "^[," copy-prev-word * Line Editor ... * Cool Builtins ... * Globbing Qualifiers zsh> echo */* zsh> echo */*(.) zsh> echo **/*.html(.) zsh> tar ... **/*.html(.R) zsh> rw-r-r-- **/*.html(.^R) zsh> echo $^path(@N) * Multiple Redirection zsh> ls >foo >bar zsh> make install > /tmp/logfile | grep -i error === Aliases, global $ cat /usr/share/dict/ngerman | grep -i nitz | vim - $ cat ~dict/ngerman | grep -i nitz | vim - zsh> P lo chemnitz G html G -v tmp V zsh> cat ~dict/ngerman P lo chemnitz G html G -v tmp V alias -g P='|' # Für Tastaturen ohne Pipe-Taste alias -g L='| less' alias -g V='| vim -' alias -g H='| head' alias -g T='| tail' alias -g S='| sort' alias -g W='| wc -l' # Für Tastaturen ohne Pipe-Taste zsh> ... P command W zsh> ... P command S -n H -100 L zsh> ... P command S -n H -100 V === Aliases + Globbing ein paar uebliche aliase: ll -> ls -l la -> ls -a lla -> ls -la aufgabe: analaoge aliase fuer verzeichnisse hinzufuegen: lsd -> list directories lld -> list directories (long) loesungen fuer bash bzw zsh: bash> alias lsd='find . -type d -maxdepth 1 -exec ls -d {} \;' bash> alias lld='find . -type d -maxdepth 1 -exec ls -dl {} \;' zsh> alias lsd='ls -d *(/)' zsh> alias lld='ls -dl *(/)' die notation fuer zsh ist weitaus kuerzer. qualifiers & globbing! nur die unterverzeichnisse im aktuellen verzeichnis: zsh> ls -ld *(/) alle unterverzeichnisse in allen unterverzeichnissen - rekursion mittels "**": zsh> alias tree='ls -d **/*(/)' bash> find . -type f -exec chmod 700 {} \; zsh> chmod 700 **/*(.) zsh> for dir in `!!` zsh> for dir in `echo $path` for> echo $dir for> done /home/www/guckes/bin /usr/local/bin /usr/bin /bin /usr/bin/X11 /usr/games === command line editing Der Line Editor (zle) gibt mit einem extra prompt an, dass man sich zB in einer Schleife befindet: zsh> for dir in `echo $path`; do for> echo $dir for> done mit CTRL-P die previous line ansehen, innerhalb der multi-zeile wieder mit CTRL-P nach oben gehen, und dann klammern vor die schleife setzen, und am ende des ersten kommandos eine weitere zeile einfuegen mit CTRL-V CTRL-J. danach noch eine befehle hinzufugen, der die ausfuehrbaren dateien im verzeichnis anzeigt. und dann am ende noch die klammer schliessen und das ganze mit dem pager "less" auffangen: zsh> ( for dir in `echo $path`; do for> echo $dir: for> echo $dir/*(x) for> done ) | less schon hat mal alle ausfuehrbaren dateien im aktuellen pfad. === Command Completion / Kommandovervollstaendigung: Ein einfaches Beispiel: zsh> staedte=(bregenz eisenstadt graz innsbruck klagenfurt linz salzburg stpoelten wien) zsh> compctl -k staedte tux zsh> tux zsh> cd /tmp/guckes/chemnitz/dir Expansion innerhalb der Eingabezeile (inline expansion): zsh> which vim zsh> ls -l `!!` /usr/bin/vim zsh> ls -l `which vim` === Vorsicht! zsh:~> rm -rf / * zsh: sure you want to delete all the files in /home/guckes [yn]? Warnung vor der Loeschung eines Verzeichnisses. :-) === Aufzaehlung / Enumeration bash> for zahl in $(seq 23 43); do factor $zahl done zsh> for zahl in {23..42}; do factor $zahl done zsh> touch foo{23..42}bar.html Kuerzere Schreibweise. :) === change directory / Verzeichnisse wechseln zsh> cd /u/s/d/xm/exa -> zsh> cd /usr/share/doc/xml-core/examples/ zsh> hash -d doc=/usr/share/doc zsh> cd ~doc zsh> pwd /usr/share/doc === expansion zsh> command `cat prefix zsh> command `cat filename` das schliessende backtick wird hinzugefuegt. === Kuer: * Modul: T*tr*s :) === Plugs * grml.org - zsh als default shell! * linuxbus.de - mehr busse zu mehr events! * texttools.org - alles ueber texttools. (wiki?) === Links Diese Seite: http://www.guckes.net/talks/zsh/zsh_featurama_show.2008-03-02.txt Zsh Reference Card / GRML-Zsh-Refcard http://www.grml.org/zsh/grml-zsh-refcard.pdf [2008-01-19] von Julius Plenz, Michael Prokop und Frank Terbeck Michael Prokop - zsh-workshop [20061128]: http://grml.org/zsh/zsh-workshop.html Sven Guckes + Julius Plenz - Zsh Workshop beim CLT2005: http://chemnitzer.linux-tage.de/2005/tutorials/detail.html?idx=151 http://www.guckes.net/chemnitz2005/zshrc_workshop.2005-03-05 === Buch Oliver Kiddle, Jerry Peek, and Peter Stephenson from bash to zsh ("Conquering the Command Line") Apress, 35$, ISBN 1-59050-376-6 Sven Guckes + Julius Plenz: Zsh - Die magische Shell ISBN: 3937514597 Open Source Press kartoniert, 200 Seiten Juni 2008! === DANKE Danke fuer's Zuhoeren! Ich hoffe ihr habt noch fragen. Bitte senden an: Sven Guckes chemnitz2008@guckes.net