Your SlideShare is downloading. ×
0
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Shell
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Shell

1,778

Published on

L'utilisation du shell au quotidien …

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

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total Views
1,778
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
32
Comments
1
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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

×