Shell

2 151 vues

Publié le

L'utilisation du shell au quotidien
* Bonnes pratiques
* Présentation de ZSH
* La complétion
* ZLE
Test

Publié dans : Technologie
1 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
2 151
Sur SlideShare
0
Issues des intégrations
0
Intégrations
12
Actions
Partages
0
Téléchargements
37
Commentaires
1
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Shell

  1. 1. Le shell : ZSH et divers Bruno Bonfils, <asyd@asyd.net> Mars 2008
  2. 2. Disclaimer • Basé sur mon expérience personnelle • Pas de troll pendant la présentation, merci !
  3. 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. 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. 5. Organisation • ~/download : une hiérarchie simple mais efficace • tmp • travail • docs • bin • tools • • Utilisation d’un SCM
  6. 6. Utilisation • Outils indispensable • screen • Le cœur du shell : l’interpréteur (zsh !)
  7. 7. Les outils • Les plus évidents • grep, find, xargs • sed, awk, perl • Les moins connus • socat • dict
  8. 8. Les outils • screen • multiplexage / splitting • recherche dans buffer • hardstatus / title bars • copier/coller sans souris
  9. 9. ZSH • Shell axé interactif • Maintenant disponible de base sur la plupart des Unix (sauf Linux...)
  10. 10. ZSH • Quelques points forts de zsh • pattern matching • substitution • la complétion • plein d’autres...
  11. 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. 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. 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. 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. 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. 16. zsh : Scripting un second exemple % var=quot;abcquot; ; print ${(j::)${(Oas::)var}} cba Oa : reverse order
  17. 17. Les tableaux associatifs • set -A myarray ; myarray=(key value) • echo $myarray[key]
  18. 18. Les tableaux associatifs • set -A myarray ; myarray=(key value) • echo $myarray[key] ${(AA)array:=${(zs:=:)${(f)quot;$(<tomcat.properties)quot;}}}
  19. 19. zsh : la complétion
  20. 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. 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. 22. zsh : la complétion • Une définition pour plus de 1500 commandes (tout OS confondus) • UNIX, Windows, OS-X
  23. 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. 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. 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. 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. 27. zsh : la complétion • L’apparition des commandes aptitude-bundle-* m’a rendu fou (complétion multiple sur sudo apt<tab>) donc :
  28. 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. 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. 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. 31. zsh : zle • Quelques widgets à connaître : • push-line • insert-last-word • history-search-{backward|forward}
  32. 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. 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. 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. 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. 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. 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

×