SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Le shell :
ZSH et divers


Bruno Bonfils, <asyd@asyd.net>
         Mars 2008
Disclaimer


• Basé sur mon expérience personnelle
• Pas de troll pendant la présentation, merci !
Au programme
• Le shell en général (retour d’expérience)
• ZSH :
 • Le scripting
 • La complétion
 • ZLE (ZSH Line Editor)
 • Autres
Rappel
• Le shell n’est pas uniquement destiné à
  exécuter des commandes mais également
  (et surtout ?) à traiter des données
  • Extraction de colonnes
  • Modification de masse
  • Calculs
Organisation

• ~/download
     : une hiérarchie simple mais efficace
 • tmp
 • travail
 • docs
 • bin
 • tools
 •
• Utilisation d’un SCM
Utilisation

• Outils indispensable
 • screen
• Le cœur du shell : l’interpréteur (zsh !)
Les outils
• Les plus évidents
 • grep, find, xargs
 • sed, awk, perl
• Les moins connus
 • socat
 • dict
Les outils

• screen
 • multiplexage / splitting
 • recherche dans buffer
 • hardstatus / title bars
 • copier/coller sans souris
ZSH


• Shell axé interactif
• Maintenant disponible de base sur la
  plupart des Unix (sauf Linux...)
ZSH

• Quelques points forts de zsh
 • pattern matching
 • substitution
 • la complétion
 • plein d’autres...
zsh : Pattern matching
    Oubliez find !
•   Afficher l’ensemble des   •   Finalement non, je ne
    éléments d’un                veux que les répertoires
    répertoire et de ses
    sous répertoires             •   ls -d **/*(/)

    •   ls **/*              •   Autre exemples

•   Même chose, mais             •   ls *s*
    uniquement pour les
    fichiers                      •   ls *s*(#i)

    •   ls **/*(.)               •   ls *~*.(#i)(png|jpg)
Substitution
% var=/tmp/toto.txt
% echo ${var:flag}

         h        Équivalent à dirname (/tmp)

                   Suppression de l’extension :
         r           $ for file in **/*.jpg ; do
                 convert $file ${file:r}.png ; done

         t      Équivalent à basename (toto.txt)
         l                 Minuscule
         u                  Majuscule
C: Capitalize
                                            U: Upper case



                 Substitution
                                            L: Lower case




% echo ${(flag)variable}

     o, O, n                    Tri

        u                     Unicité
     C,U, L           Modification de la casse
    s:pattern:               Splitting
    j:pattern:                Joining
zsh : Scripting
        Un exemple pratique
• Obtenir la liste des alias définis dans le fichier
  ~/.muttrc pour en faire un tableau trié (exemple
  d’utilisation : fonction de complétion _mutt)
  alias asyd Bruno Bonfils <asyd@asyd.net>
• Équivalent à :
   • # grep ‘^alias’ ~/.muttrc | awk { print $2 } | sort -u
zsh : Scripting
 Un exemple pratique

• Créer un tableau de lignes à partir d’un
  fichier : buffer=(${(f)”$( < ~/.muttrc)”})
• list=(${(M)buffer##alias})
• list=(${(o)${buffer/alias /}%% *})
zsh : Scripting
  un second exemple

% var=quot;abcquot; ; print ${(j::)${(Oas::)var}}
cba
                                       Oa : reverse order
Les tableaux associatifs


• set -A myarray ; myarray=(key value)
• echo $myarray[key]
Les tableaux associatifs


   • set -A myarray ; myarray=(key value)
   • echo $myarray[key]
${(AA)array:=${(zs:=:)${(f)quot;$(<tomcat.properties)quot;}}}
zsh : la complétion
zsh : la complétion

• La complétion vue par zsh :
 • réutilisable : la complétion ne se fait pas
    uniquement commande par commande,
    mais surtout par type de paramètres
    (hôtes, utilisateurs, groupes, paquets, etc.)
  • configurable à un très haut niveau
zsh : la complétion
• zstyle :completion:<widget>:<completer>:<context>:<
  argument>:<tag> <style>
 • 7 widgets
 • 11 completer (complete, approximate, match, etc.)
 • ~90 tags
 • ~100 styles (file-patterns, file-sort, list, users, etc.)
zsh : la complétion


• Une définition pour plus de 1500
  commandes (tout OS confondus)
 • UNIX, Windows, OS-X
zsh : la complétion
• Une complétion parfois très poussée :
 • Liste des modules perl (perl -M<tab>,
    man <tab>, etc.)
  • Liste des paquets (distinction entre
    paquets disponibles/installés)
  • target Make/ant
• Utilisation d’un cache possible
zsh : la complétion

• La complétion se configure d’une manière
  vraiment souple, via l’utilisation des zstyle :
 • zstyle ':completion:*' use-ip true
 • zstyle ':completion:*' use-cache on
 • zstyle ':completion:*' cache-path ~/.zsh/cache
zsh : la complétion


•   zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS'

•   zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS'

•   zstyle ':completion:*' ignore-parents parent pwd
zsh : la complétion
•   zstyle ':completion:*:*:gqview:*' file-patterns
    '*(-/):directories :(#i)*.(png|jpeg|jpg):all-files'
    •   Pas de fonction de complétion pour gqview, mais je limite
        à la complétion des répertoires et des fichiers images,
        tolérant à la casse
•   zstyle ':completion:*:*:vi*:*' file-sort modification

    •   le premier fichier proposé lors d’un vi <tab> sera le dernier
        fichier modifié
zsh : la complétion
•   L’apparition des commandes aptitude-bundle-* m’a rendu
    fou (complétion multiple sur sudo apt<tab>) donc :
zsh : la complétion
•   L’apparition des commandes aptitude-bundle-* m’a rendu
    fou (complétion multiple sur sudo apt<tab>) donc :




•   zstyle ':completion:*:complete:-command-::commands' ignored-
    patterns 'aptitude-*'

•   zstyle ':completion:*:*:sudo:*:commands' ignored-patterns 'aptitude-*'
zsh : la complétion

• Définir une complétion très simple pour un
  programme (ex: script nécessitant un hôte
  en paramètre)
 • #compdef _hosts backup.sh
zsh : zle

• Les interactions entre l’utilisateur et le
  moteur se font via la ZLE (ZSH command
  Line Editing)
• Des modes vi, emacs
• Très facile de modifier les bindkeys de base
zsh : zle

• Quelques widgets à connaître :
 • push-line
 • insert-last-word
 • history-search-{backward|forward}
zsh : zle

• Il est même très facile de créer ses propres
  widgets
  • Création d’une fonction
  • Associer cette fonction à un widget
  • Binder ce widget
zsh : zle
regex-edit () {

    local REPLY words

    words=(${=BUFFER})

    read-from-minibuffer quot;Regexp:quot;

    echo $REPLY

    if [ -n $REPLY ]; then

        BUFFER=quot;$words[1] $(echo $words[2,${#words}] | sed ${REPLY})quot;

    fi

}

zle -N regex-edit

bindkey quot;^[equot; regex-edit
zsh
• Quelques autres fonctionnalités en vrac
 • suffix alias (./fichier.jpg)
 • complétion colorée
 • pile pour la gestion des répertoires
 • complétion intelligente sur les URL,
    gestion des bookmarks
zsh : exemple de
                 configuration
    % svn co http://svn.asyd.net/svn/zsh/trunk .zsh
    % ln -s .zsh/zshrc .zshrc
    % vi .zsh/README
•   Un fichier de configuration par
    •   OS
    •   Hôte
zsh : exemple de
       configuration
• Mise à jour dynamique de la hardstatusbar,
  titlebar de screen (ssh, telnet, etc.)
• Quelques hacks sur des fonctions de
  complétion
Plus d’infos

• Doc de ZSH (23000 lignes de man, contre à
  peine plus de 5000 pour bash)
• http://zshwiki.org/home/
• http://cli.asyd.net/home/
• echo subscribe | mail shell-request@asyd.net

Contenu connexe

Tendances

Beyond F5 - windbg et .Net
Beyond F5 - windbg et .NetBeyond F5 - windbg et .Net
Beyond F5 - windbg et .NetYann Schwartz
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redoThierry Gayet
 
(Open)Solaris : Introduction aux zones et à ZFS
(Open)Solaris : Introduction aux zones et à ZFS(Open)Solaris : Introduction aux zones et à ZFS
(Open)Solaris : Introduction aux zones et à ZFSBruno Bonfils
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7neuros
 
Futur du-positionnement-css
Futur du-positionnement-cssFutur du-positionnement-css
Futur du-positionnement-cssRaphaël Goetter
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirYves Van Goethem
 

Tendances (10)

Cours php
Cours phpCours php
Cours php
 
Beyond F5 - windbg et .Net
Beyond F5 - windbg et .NetBeyond F5 - windbg et .Net
Beyond F5 - windbg et .Net
 
Ruby STAR
Ruby STARRuby STAR
Ruby STAR
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redo
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
(Open)Solaris : Introduction aux zones et à ZFS
(Open)Solaris : Introduction aux zones et à ZFS(Open)Solaris : Introduction aux zones et à ZFS
(Open)Solaris : Introduction aux zones et à ZFS
 
Postgresql et psqlrc
Postgresql et psqlrcPostgresql et psqlrc
Postgresql et psqlrc
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
Futur du-positionnement-css
Futur du-positionnement-cssFutur du-positionnement-css
Futur du-positionnement-css
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenir
 

En vedette

Formation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideFormation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideTarek Jellali
 
Principes de fonctionnement unix
Principes de fonctionnement unixPrincipes de fonctionnement unix
Principes de fonctionnement unixwebreaker
 
Administration systeme UNIX
Administration systeme UNIXAdministration systeme UNIX
Administration systeme UNIXwebreaker
 
Shell scripting - By Vu Duy Tu from eXo Platform SEA
Shell scripting - By Vu Duy Tu from eXo Platform SEAShell scripting - By Vu Duy Tu from eXo Platform SEA
Shell scripting - By Vu Duy Tu from eXo Platform SEAThuy_Dang
 
Workshop ssh (OSSEC)
Workshop ssh (OSSEC)Workshop ssh (OSSEC)
Workshop ssh (OSSEC)Akram Rekik
 
initiation SSH_SecuriNets ISI Tunisie
initiation SSH_SecuriNets ISI Tunisieinitiation SSH_SecuriNets ISI Tunisie
initiation SSH_SecuriNets ISI TunisieDonia Hammami
 
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms - breizhcam...
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms  - breizhcam...Gulp fiction, Builder, tester, livrer, sans tomber dans les poms  - breizhcam...
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms - breizhcam...mbrechet
 
SSH - Secure Shell
SSH - Secure ShellSSH - Secure Shell
SSH - Secure ShellSouhaib El
 
CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」
CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」
CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」Hiro H.
 
ssh, bien plus qu'un telnet sécurisé
ssh, bien plus qu'un telnet sécuriséssh, bien plus qu'un telnet sécurisé
ssh, bien plus qu'un telnet sécuriséTryphon
 
Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Luc Juggery
 
Le web en temps réel - Socket.io - NodeJs
Le web en temps réel - Socket.io - NodeJsLe web en temps réel - Socket.io - NodeJs
Le web en temps réel - Socket.io - NodeJsThomas Ferney
 
sshGate - RMLL 2011
sshGate - RMLL 2011sshGate - RMLL 2011
sshGate - RMLL 2011Tauop
 
Comment améliorer la performance de vos sites et applications web présen...
Comment améliorer la performance de vos sites et applications web    présen...Comment améliorer la performance de vos sites et applications web    présen...
Comment améliorer la performance de vos sites et applications web présen...Roland Coma
 
Initiation a la ligne de commande
Initiation a la ligne de commandeInitiation a la ligne de commande
Initiation a la ligne de commandeLakhdar Meftah
 

En vedette (20)

Formation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideFormation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapide
 
Principes de fonctionnement unix
Principes de fonctionnement unixPrincipes de fonctionnement unix
Principes de fonctionnement unix
 
Administration systeme UNIX
Administration systeme UNIXAdministration systeme UNIX
Administration systeme UNIX
 
Shell scripting - By Vu Duy Tu from eXo Platform SEA
Shell scripting - By Vu Duy Tu from eXo Platform SEAShell scripting - By Vu Duy Tu from eXo Platform SEA
Shell scripting - By Vu Duy Tu from eXo Platform SEA
 
Workshop ssh (OSSEC)
Workshop ssh (OSSEC)Workshop ssh (OSSEC)
Workshop ssh (OSSEC)
 
initiation SSH_SecuriNets ISI Tunisie
initiation SSH_SecuriNets ISI Tunisieinitiation SSH_SecuriNets ISI Tunisie
initiation SSH_SecuriNets ISI Tunisie
 
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms - breizhcam...
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms  - breizhcam...Gulp fiction, Builder, tester, livrer, sans tomber dans les poms  - breizhcam...
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms - breizhcam...
 
SSH - Secure Shell
SSH - Secure ShellSSH - Secure Shell
SSH - Secure Shell
 
CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」
CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」
CLR/H 第56回勉強会 LT「Ruby向けmultisetライブラリのご紹介」
 
Zsh Rmll
Zsh RmllZsh Rmll
Zsh Rmll
 
Linux shell scripting
Linux shell scriptingLinux shell scripting
Linux shell scripting
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
Atelier ssh
Atelier sshAtelier ssh
Atelier ssh
 
ssh, bien plus qu'un telnet sécurisé
ssh, bien plus qu'un telnet sécuriséssh, bien plus qu'un telnet sécurisé
ssh, bien plus qu'un telnet sécurisé
 
Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3
 
Le web en temps réel - Socket.io - NodeJs
Le web en temps réel - Socket.io - NodeJsLe web en temps réel - Socket.io - NodeJs
Le web en temps réel - Socket.io - NodeJs
 
SSH : Secure Shell
SSH : Secure ShellSSH : Secure Shell
SSH : Secure Shell
 
sshGate - RMLL 2011
sshGate - RMLL 2011sshGate - RMLL 2011
sshGate - RMLL 2011
 
Comment améliorer la performance de vos sites et applications web présen...
Comment améliorer la performance de vos sites et applications web    présen...Comment améliorer la performance de vos sites et applications web    présen...
Comment améliorer la performance de vos sites et applications web présen...
 
Initiation a la ligne de commande
Initiation a la ligne de commandeInitiation a la ligne de commande
Initiation a la ligne de commande
 

Similaire à Shell

Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
Formation PHP
Formation PHPFormation PHP
Formation PHPkemenaran
 
PHP - get started
PHP - get startedPHP - get started
PHP - get startedmazenovi
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 
VIM puissance PHP = VI Improved !
VIM puissance PHP = VI Improved !VIM puissance PHP = VI Improved !
VIM puissance PHP = VI Improved !Frederic Hardy
 
ENIB 2013-2014 - CAI Web #3: Groovy
ENIB 2013-2014 - CAI Web #3: GroovyENIB 2013-2014 - CAI Web #3: Groovy
ENIB 2013-2014 - CAI Web #3: GroovyHoracio Gonzalez
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 
[JK] BASH pour les utilisateurs de Windows
[JK] BASH pour les utilisateurs de Windows[JK] BASH pour les utilisateurs de Windows
[JK] BASH pour les utilisateurs de WindowsJoseph Konka
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP EL JAOUARI Ahmed
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
PHP 6, la prochaine frontière
PHP 6, la prochaine frontièrePHP 6, la prochaine frontière
PHP 6, la prochaine frontièreDamien Seguy
 
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme webGestion des logs sur une plateforme web
Gestion des logs sur une plateforme webfredcons
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Enib cours c.a.i. web - séance #5 - groovy
Enib   cours c.a.i. web - séance #5 - groovyEnib   cours c.a.i. web - séance #5 - groovy
Enib cours c.a.i. web - séance #5 - groovyHoracio Gonzalez
 

Similaire à Shell (20)

Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
Formation PHP
Formation PHPFormation PHP
Formation PHP
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
PHP - get started
PHP - get startedPHP - get started
PHP - get started
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
VIM puissance PHP = VI Improved !
VIM puissance PHP = VI Improved !VIM puissance PHP = VI Improved !
VIM puissance PHP = VI Improved !
 
ENIB 2013-2014 - CAI Web #3: Groovy
ENIB 2013-2014 - CAI Web #3: GroovyENIB 2013-2014 - CAI Web #3: Groovy
ENIB 2013-2014 - CAI Web #3: Groovy
 
PHP.pptx
PHP.pptxPHP.pptx
PHP.pptx
 
Cours php bac info
Cours php bac infoCours php bac info
Cours php bac info
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
[JK] BASH pour les utilisateurs de Windows
[JK] BASH pour les utilisateurs de Windows[JK] BASH pour les utilisateurs de Windows
[JK] BASH pour les utilisateurs de Windows
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP
 
Php cours
Php coursPhp cours
Php cours
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
PHP 6, la prochaine frontière
PHP 6, la prochaine frontièrePHP 6, la prochaine frontière
PHP 6, la prochaine frontière
 
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme webGestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
Enib cours c.a.i. web - séance #5 - groovy
Enib   cours c.a.i. web - séance #5 - groovyEnib   cours c.a.i. web - séance #5 - groovy
Enib cours c.a.i. web - séance #5 - groovy
 

Plus de Bruno Bonfils

Plus de Bruno Bonfils (10)

Drupal sso
Drupal ssoDrupal sso
Drupal sso
 
Vue d'ensemble du SSO
Vue d'ensemble du SSOVue d'ensemble du SSO
Vue d'ensemble du SSO
 
Splunk
SplunkSplunk
Splunk
 
iTop
iTopiTop
iTop
 
RunDeck
RunDeckRunDeck
RunDeck
 
Présentation de l'association GUSES
Présentation de l'association GUSESPrésentation de l'association GUSES
Présentation de l'association GUSES
 
Métrologie des IOs
Métrologie des IOsMétrologie des IOs
Métrologie des IOs
 
Introduction à OpenSolaris
Introduction à OpenSolarisIntroduction à OpenSolaris
Introduction à OpenSolaris
 
Ldap
LdapLdap
Ldap
 
La signature numérique
La signature numériqueLa signature numérique
La signature numérique
 

Shell

  • 1. Le shell : ZSH et divers Bruno Bonfils, <asyd@asyd.net> Mars 2008
  • 2. Disclaimer • Basé sur mon expérience personnelle • Pas de troll pendant la présentation, merci !
  • 3. Au programme • Le shell en général (retour d’expérience) • ZSH : • Le scripting • La complétion • ZLE (ZSH Line Editor) • Autres
  • 4. Rappel • Le shell n’est pas uniquement destiné à exécuter des commandes mais également (et surtout ?) à traiter des données • Extraction de colonnes • Modification de masse • Calculs
  • 5. Organisation • ~/download : une hiérarchie simple mais efficace • tmp • travail • docs • bin • tools • • Utilisation d’un SCM
  • 6. Utilisation • Outils indispensable • screen • Le cœur du shell : l’interpréteur (zsh !)
  • 7. Les outils • Les plus évidents • grep, find, xargs • sed, awk, perl • Les moins connus • socat • dict
  • 8. Les outils • screen • multiplexage / splitting • recherche dans buffer • hardstatus / title bars • copier/coller sans souris
  • 9. ZSH • Shell axé interactif • Maintenant disponible de base sur la plupart des Unix (sauf Linux...)
  • 10. ZSH • Quelques points forts de zsh • pattern matching • substitution • la complétion • plein d’autres...
  • 11. zsh : Pattern matching Oubliez find ! • Afficher l’ensemble des • Finalement non, je ne éléments d’un veux que les répertoires répertoire et de ses sous répertoires • ls -d **/*(/) • ls **/* • Autre exemples • Même chose, mais • ls *s* uniquement pour les fichiers • ls *s*(#i) • ls **/*(.) • ls *~*.(#i)(png|jpg)
  • 12. Substitution % var=/tmp/toto.txt % echo ${var:flag} h Équivalent à dirname (/tmp) Suppression de l’extension : r $ for file in **/*.jpg ; do convert $file ${file:r}.png ; done t Équivalent à basename (toto.txt) l Minuscule u Majuscule
  • 13. C: Capitalize U: Upper case Substitution L: Lower case % echo ${(flag)variable} o, O, n Tri u Unicité C,U, L Modification de la casse s:pattern: Splitting j:pattern: Joining
  • 14. zsh : Scripting Un exemple pratique • Obtenir la liste des alias définis dans le fichier ~/.muttrc pour en faire un tableau trié (exemple d’utilisation : fonction de complétion _mutt) alias asyd Bruno Bonfils <asyd@asyd.net> • Équivalent à : • # grep ‘^alias’ ~/.muttrc | awk { print $2 } | sort -u
  • 15. zsh : Scripting Un exemple pratique • Créer un tableau de lignes à partir d’un fichier : buffer=(${(f)”$( < ~/.muttrc)”}) • list=(${(M)buffer##alias}) • list=(${(o)${buffer/alias /}%% *})
  • 16. zsh : Scripting un second exemple % var=quot;abcquot; ; print ${(j::)${(Oas::)var}} cba Oa : reverse order
  • 17. Les tableaux associatifs • set -A myarray ; myarray=(key value) • echo $myarray[key]
  • 18. Les tableaux associatifs • set -A myarray ; myarray=(key value) • echo $myarray[key] ${(AA)array:=${(zs:=:)${(f)quot;$(<tomcat.properties)quot;}}}
  • 19. zsh : la complétion
  • 20. zsh : la complétion • La complétion vue par zsh : • réutilisable : la complétion ne se fait pas uniquement commande par commande, mais surtout par type de paramètres (hôtes, utilisateurs, groupes, paquets, etc.) • configurable à un très haut niveau
  • 21. zsh : la complétion • zstyle :completion:<widget>:<completer>:<context>:< argument>:<tag> <style> • 7 widgets • 11 completer (complete, approximate, match, etc.) • ~90 tags • ~100 styles (file-patterns, file-sort, list, users, etc.)
  • 22. zsh : la complétion • Une définition pour plus de 1500 commandes (tout OS confondus) • UNIX, Windows, OS-X
  • 23. zsh : la complétion • Une complétion parfois très poussée : • Liste des modules perl (perl -M<tab>, man <tab>, etc.) • Liste des paquets (distinction entre paquets disponibles/installés) • target Make/ant • Utilisation d’un cache possible
  • 24. zsh : la complétion • La complétion se configure d’une manière vraiment souple, via l’utilisation des zstyle : • zstyle ':completion:*' use-ip true • zstyle ':completion:*' use-cache on • zstyle ':completion:*' cache-path ~/.zsh/cache
  • 25. zsh : la complétion • zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS' • zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS' • zstyle ':completion:*' ignore-parents parent pwd
  • 26. zsh : la complétion • zstyle ':completion:*:*:gqview:*' file-patterns '*(-/):directories :(#i)*.(png|jpeg|jpg):all-files' • Pas de fonction de complétion pour gqview, mais je limite à la complétion des répertoires et des fichiers images, tolérant à la casse • zstyle ':completion:*:*:vi*:*' file-sort modification • le premier fichier proposé lors d’un vi <tab> sera le dernier fichier modifié
  • 27. zsh : la complétion • L’apparition des commandes aptitude-bundle-* m’a rendu fou (complétion multiple sur sudo apt<tab>) donc :
  • 28. zsh : la complétion • L’apparition des commandes aptitude-bundle-* m’a rendu fou (complétion multiple sur sudo apt<tab>) donc : • zstyle ':completion:*:complete:-command-::commands' ignored- patterns 'aptitude-*' • zstyle ':completion:*:*:sudo:*:commands' ignored-patterns 'aptitude-*'
  • 29. zsh : la complétion • Définir une complétion très simple pour un programme (ex: script nécessitant un hôte en paramètre) • #compdef _hosts backup.sh
  • 30. zsh : zle • Les interactions entre l’utilisateur et le moteur se font via la ZLE (ZSH command Line Editing) • Des modes vi, emacs • Très facile de modifier les bindkeys de base
  • 31. zsh : zle • Quelques widgets à connaître : • push-line • insert-last-word • history-search-{backward|forward}
  • 32. zsh : zle • Il est même très facile de créer ses propres widgets • Création d’une fonction • Associer cette fonction à un widget • Binder ce widget
  • 33. zsh : zle regex-edit () { local REPLY words words=(${=BUFFER}) read-from-minibuffer quot;Regexp:quot; echo $REPLY if [ -n $REPLY ]; then BUFFER=quot;$words[1] $(echo $words[2,${#words}] | sed ${REPLY})quot; fi } zle -N regex-edit bindkey quot;^[equot; regex-edit
  • 34. zsh • Quelques autres fonctionnalités en vrac • suffix alias (./fichier.jpg) • complétion colorée • pile pour la gestion des répertoires • complétion intelligente sur les URL, gestion des bookmarks
  • 35. zsh : exemple de configuration % svn co http://svn.asyd.net/svn/zsh/trunk .zsh % ln -s .zsh/zshrc .zshrc % vi .zsh/README • Un fichier de configuration par • OS • Hôte
  • 36. zsh : exemple de configuration • Mise à jour dynamique de la hardstatusbar, titlebar de screen (ssh, telnet, etc.) • Quelques hacks sur des fonctions de complétion
  • 37. Plus d’infos • Doc de ZSH (23000 lignes de man, contre à peine plus de 5000 pour bash) • http://zshwiki.org/home/ • http://cli.asyd.net/home/ • echo subscribe | mail shell-request@asyd.net