zsh rmll
DESCRIPTION
Introduction à ZSH et les bonnes pratiques du shellTRANSCRIPT
zsh : utilisation interactiveBruno Bonfils, <[email protected]>
mardi 5 mai 2009
Sommaire
mardi 5 mai 2009
Sommaire
Introduction
mardi 5 mai 2009
Sommaire
Introduction
Organisation du shell, outils
mardi 5 mai 2009
Sommaire
Introduction
Organisation du shell, outils
La complétion ZSH
mardi 5 mai 2009
Sommaire
Introduction
Organisation du shell, outils
La complétion ZSH
ZLE (zsh line editor)
mardi 5 mai 2009
Sommaire
Introduction
Organisation du shell, outils
La complétion ZSH
ZLE (zsh line editor)
Quelques astuces
mardi 5 mai 2009
Sommaire
Introduction
Organisation du shell, outils
La complétion ZSH
ZLE (zsh line editor)
Quelques astuces
Les outils zsh
mardi 5 mai 2009
IntroductionMa vision du shell
mardi 5 mai 2009
Introduction
Définition : un shell est un programme fournissant une interface avec les utilisateurs
Ma vision du shell
mardi 5 mai 2009
Introduction
Définition : un shell est un programme fournissant une interface avec les utilisateurs
La productivité fournie par un outil en ligne de commande n’a jamais été égalée par des applications graphiques (pour une utilisation générique)
Ma vision du shell
mardi 5 mai 2009
Organisation / Outils
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre répertoire utilisateur
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre répertoire utilisateur
Un nombre fini de répertoire
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre répertoire utilisateur
Un nombre fini de répertoire
Des noms explicites
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre répertoire utilisateur
Un nombre fini de répertoire
Des noms explicites
Utilisation d’un SCM
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre répertoire utilisateur
Un nombre fini de répertoire
Des noms explicites
Utilisation d’un SCM
Des outils annexes indispensables
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre répertoire utilisateur
Un nombre fini de répertoire
Des noms explicites
Utilisation d’un SCM
Des outils annexes indispensables
screen
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre répertoire utilisateur
Un nombre fini de répertoire
Des noms explicites
Utilisation d’un SCM
Des outils annexes indispensables
screen
dictmardi 5 mai 2009
Exemple d’organisation
archivesbindocsdownloadetctmptoolswork
Respecter cette hiérarchie sur l’ensemble de vos comptes/ordinateurs vous permet une plus grande productivité.
mardi 5 mai 2009
Un mot sur dict
mardi 5 mai 2009
Un mot sur dict
dict est un outil client/serveur permettant d’interroger un ensemble de dictionnaires
mardi 5 mai 2009
Un mot sur dict
dict est un outil client/serveur permettant d’interroger un ensemble de dictionnaires
VERA (Virtual Entity of Relevant Acronyms)
mardi 5 mai 2009
Un mot sur dict
dict est un outil client/serveur permettant d’interroger un ensemble de dictionnaires
VERA (Virtual Entity of Relevant Acronyms)
GCide, dictionnaire anglais
mardi 5 mai 2009
Un mot sur dict
dict est un outil client/serveur permettant d’interroger un ensemble de dictionnaires
VERA (Virtual Entity of Relevant Acronyms)
GCide, dictionnaire anglais
Et de nombreux autres
mardi 5 mai 2009
Un mot sur dict
dict est un outil client/serveur permettant d’interroger un ensemble de dictionnaires
VERA (Virtual Entity of Relevant Acronyms)
GCide, dictionnaire anglais
Et de nombreux autres
% dict bgp BGP Border Gateway Protocol (RFC 1267/1771, IP)
mardi 5 mai 2009
Un mot sur screen
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
Découpage (split) des vues
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
Découpage (split) des vues
Enregistrement, recherche
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
Découpage (split) des vues
Enregistrement, recherche
Copier/Coller sans souris
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
Découpage (split) des vues
Enregistrement, recherche
Copier/Coller sans souris
Hardstatus/title bar
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
Découpage (split) des vues
Enregistrement, recherche
Copier/Coller sans souris
Hardstatus/title bar
Très utile en relation avec zsh !
mardi 5 mai 2009
Un mot sur screen
Title bar
Hardstatus bar
mardi 5 mai 2009
Un mot sur screen
Title bar
Hardstatus bar
RPS1Dynamique
mardi 5 mai 2009
Un mot sur screen
mardi 5 mai 2009
Un mot sur screen
Grâce à des fonctions, il est possible de rendre dynamique le contenu des barres de titre et de statut
mardi 5 mai 2009
Un mot sur screen
Grâce à des fonctions, il est possible de rendre dynamique le contenu des barres de titre et de statut
ssh, telnet vont définir le nom d’hôte dans la barre de statut
mardi 5 mai 2009
Un mot sur screen
Grâce à des fonctions, il est possible de rendre dynamique le contenu des barres de titre et de statut
ssh, telnet vont définir le nom d’hôte dans la barre de statut
heure, commande et chemin en cours dans la barre de titre
mardi 5 mai 2009
La complétion zsh
mardi 5 mai 2009
La complétion zsh
Les concepts
mardi 5 mai 2009
La complétion zsh
Les concepts
Les widgets
mardi 5 mai 2009
La complétion zsh
Les concepts
Les widgets
les zstyles, où comment configurer la complétion en fonction de ses envies
mardi 5 mai 2009
La complétion zsh
Les concepts
Les widgets
les zstyles, où comment configurer la complétion en fonction de ses envies
Définir/étendre la complétion
mardi 5 mai 2009
Les concepts
mardi 5 mai 2009
Les concepts
Écrire des fonctions de complétion très avancées, tout en pensant à la réutilisation
mardi 5 mai 2009
Les concepts
Écrire des fonctions de complétion très avancées, tout en pensant à la réutilisation
Une configuration très fine, pouvant contrôler le comportement de la complétion
mardi 5 mai 2009
La complétion
mardi 5 mai 2009
La complétion
Tout le monde connais la complétion sur les commandes
mardi 5 mai 2009
La complétion
Tout le monde connais la complétion sur les commandes
Mais zsh propose bien plus :
mardi 5 mai 2009
La complétion
Tout le monde connais la complétion sur les commandes
Mais zsh propose bien plus :
Une complétion sur les arguments
mardi 5 mai 2009
La complétion
Tout le monde connais la complétion sur les commandes
Mais zsh propose bien plus :
Une complétion sur les arguments
Une complétion contextuelle (différente en fonction de l’argument précédent par exemple)
mardi 5 mai 2009
Quelques exemples : apt-get
mardi 5 mai 2009
Quelques exemples : apt-get
complétion des sous commandes (install, update, etc.)
mardi 5 mai 2009
Quelques exemples : apt-get
complétion des sous commandes (install, update, etc.)
complétion de la liste des paquets
mardi 5 mai 2009
Quelques exemples : apt-get
complétion des sous commandes (install, update, etc.)
complétion de la liste des paquets
Gestion du statut du paquet (installé, disponible)
mardi 5 mai 2009
Quelques exemples : apt-get
complétion des sous commandes (install, update, etc.)
complétion de la liste des paquets
Gestion du statut du paquet (installé, disponible)
Utilisation d’un cache
mardi 5 mai 2009
Quelques exemples : configure
mardi 5 mai 2009
Quelques exemples : configure
Lorsque l’on compile un logiciel à partir des sources, s’il utilise les autotools, cela commence généralement par un ./configure --help | less pour connaître la liste des options disponibles (surtout celles spécifiques)
mardi 5 mai 2009
Quelques exemples : configure
Lorsque l’on compile un logiciel à partir des sources, s’il utilise les autotools, cela commence généralement par un ./configure --help | less pour connaître la liste des options disponibles (surtout celles spécifiques)
Avec zsh, passez vous de cette étape, utiliser juste ./configure --<tab>
mardi 5 mai 2009
Autres exemples
mardi 5 mai 2009
Autres exemples
pour la commande man, zsh complète non seulement la liste des pages de manuels, mais aussi la liste des modules perl (documentation en pod)
mardi 5 mai 2009
Autres exemples
pour la commande man, zsh complète non seulement la liste des pages de manuels, mais aussi la liste des modules perl (documentation en pod)
pour les options ao/vo de mplayer, la définition de la liste est dynamique
mardi 5 mai 2009
Les widgets
mardi 5 mai 2009
Les widgets
Quelques exemples de fonctions réutilisables
mardi 5 mai 2009
Les widgets
Quelques exemples de fonctions réutilisables
_users _groups
mardi 5 mai 2009
Les widgets
Quelques exemples de fonctions réutilisables
_users _groups
_hosts
mardi 5 mai 2009
Les widgets
Quelques exemples de fonctions réutilisables
_users _groups
_hosts
_services
mardi 5 mai 2009
approximate / correct
mardi 5 mai 2009
approximate / correct
zsh dispose de fonctionnalités pour corriger automatiquement des erreurs de frappe
mardi 5 mai 2009
approximate / correct
zsh dispose de fonctionnalités pour corriger automatiquement des erreurs de frappe
Erreur de casse (cd /Etc)
mardi 5 mai 2009
approximate / correct
zsh dispose de fonctionnalités pour corriger automatiquement des erreurs de frappe
Erreur de casse (cd /Etc)
L’inversion de caractères (banane, abnane)
mardi 5 mai 2009
approximate / correct
zsh dispose de fonctionnalités pour corriger automatiquement des erreurs de frappe
Erreur de casse (cd /Etc)
L’inversion de caractères (banane, abnane)
Des caractères manquant, en trop (ricard, richard)
mardi 5 mai 2009
les zstyle
Les zstyle permettent de contrôler de manière très fine le comportement de la complétion
Permet de définir des comportements à plusieurs niveaux
global
par commande
par argument
mardi 5 mai 2009
Exemples de zstyle
mardi 5 mai 2009
Exemples de zstyle
zstyle ':completion:*:processes' command 'ps -au$USER'
Commandepour obtenir la liste
des processus
mardi 5 mai 2009
Exemples de zstyle
zstyle ':completion:*:processes' command 'ps -au$USER'
zstyle ':completion:*' use-cache on
Active le cache
mardi 5 mai 2009
Exemples de zstyle
zstyle ':completion:*:processes' command 'ps -au$USER'
zstyle ':completion:*' use-cache on
zstyle ':completion:*' ignore-parents parent pwd
Ignore le répertoire parent
mardi 5 mai 2009
Exemples de zstyle
zstyle ':completion:*:processes' command 'ps -au$USER'
zstyle ':completion:*' use-cache on
zstyle ':completion:*' ignore-parents parent pwd
zstyle ':completion:*:*:vi*:*' file-sort modification
Utilise l’heure de modification comme critère de tri pour vi
Dans ce dernier cas, le comportement est surchargé pour une commande !
mardi 5 mai 2009
Étendre la complétion
mardi 5 mai 2009
Étendre la complétion
Comportement par défaut
mardi 5 mai 2009
Étendre la complétion
Comportement par défaut
compdef
mardi 5 mai 2009
Étendre la complétion
Comportement par défaut
compdef
zstyle
mardi 5 mai 2009
La complétion
mardi 5 mai 2009
La complétion
Pour une application dont il n’existe pas de fonction de complétion, le widget _files est utilisé
mardi 5 mai 2009
La complétion
Pour une application dont il n’existe pas de fonction de complétion, le widget _files est utilisé
Mais il est possible de surcharger ce comportement
mardi 5 mai 2009
La complétion
Pour une application dont il n’existe pas de fonction de complétion, le widget _files est utilisé
Mais il est possible de surcharger ce comportement
Un script maison attendant un nom d’hôte en argument
mardi 5 mai 2009
La complétion
Pour une application dont il n’existe pas de fonction de complétion, le widget _files est utilisé
Mais il est possible de surcharger ce comportement
Un script maison attendant un nom d’hôte en argument
% compdef _hosts myscriptmardi 5 mai 2009
La complétion
mardi 5 mai 2009
La complétion
Il est également possible de spécifier un pattern matching afin de limiter la complétion sur les fichiers
mardi 5 mai 2009
La complétion
Il est également possible de spécifier un pattern matching afin de limiter la complétion sur les fichiers
zstyle ':completion:*:*:lintian:*' file-patterns '*(-/):directories *.deb'
mardi 5 mai 2009
La complétion
Il est également possible de spécifier un pattern matching afin de limiter la complétion sur les fichiers
zstyle ':completion:*:*:lintian:*' file-patterns '*(-/):directories *.deb'
zstyle ':completion:*:*:gqview:*' file-patterns '*(-/):directories :(#i)*.(png|jpeg|jpg):all-files'
mardi 5 mai 2009
La complétion
Il est également possible de spécifier un pattern matching afin de limiter la complétion sur les fichiers
zstyle ':completion:*:*:lintian:*' file-patterns '*(-/):directories *.deb'
zstyle ':completion:*:*:gqview:*' file-patterns '*(-/):directories :(#i)*.(png|jpeg|jpg):all-files'
zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS'
mardi 5 mai 2009
ZLE, zsh line editor
mardi 5 mai 2009
ZLE, zsh line editor
Plusieurs modes possibles
mardi 5 mai 2009
ZLE, zsh line editor
Plusieurs modes possibles
emacs
mardi 5 mai 2009
ZLE, zsh line editor
Plusieurs modes possibles
emacs
vi (mode commande, mode insert)
mardi 5 mai 2009
ZLE, zsh line editor
Plusieurs modes possibles
emacs
vi (mode commande, mode insert)
Extensible en écrivant ses propres widgets
mardi 5 mai 2009
Quelques bindkeys utiles
mardi 5 mai 2009
Quelques bindkeys utiles
history-search-{back|for}ward
Permet de parcourir les anciens appels à une commande donnée
mardi 5 mai 2009
Quelques bindkeys utiles
history-search-{back|for}ward
insert-last-word
Insère le dernier mot de la saisie
mardi 5 mai 2009
Quelques bindkeys utiles
history-search-{back|for}ward
insert-last-word
push-line
Temporise la commande en cours
mardi 5 mai 2009
Étendre les bindkeys
mardi 5 mai 2009
Étendre les bindkeys
Création d’un bindkey (vi):
mardi 5 mai 2009
Étendre les bindkeys
Création d’un bindkey (vi): bindkey -s '((' '()\ei'
mardi 5 mai 2009
Étendre les bindkeys
Création d’un bindkey (vi):
Permet de rajouter automatiquement la parenthèse fermante et de reculer d’un caractère
bindkey -s '((' '()\ei'
mardi 5 mai 2009
D’autres fonctionnalités
mardi 5 mai 2009
D’autres fonctionnalités
autopushd
mardi 5 mai 2009
D’autres fonctionnalités
autopushd
zmv
mardi 5 mai 2009
D’autres fonctionnalités
autopushd
zmv
alias
mardi 5 mai 2009
D’autres fonctionnalités
autopushd
zmv
alias
historique partagé
mardi 5 mai 2009
autopushd
autopushd est une option permettant la mise en pile (stack) des n derniers répertoires visités dans la session
permet de faire cd -<tab/numéro> pour retourner rapidement un ancien répertoire
mardi 5 mai 2009
zmv
mardi 5 mai 2009
zmv
Lorsque que vous devez renommer plusieurs fichiers, la manière classique est d’utiliser une boucle
for file in **/*(#i).ogg ; do
mv $file ${(C)$file:r}.ogg ;
done
Puis autre boucle pour gérer les répertoires
mardi 5 mai 2009
zmv
Lorsque que vous devez renommer plusieurs fichiers, la manière classique est d’utiliser une boucle
mardi 5 mai 2009
zmv
Lorsque que vous devez renommer plusieurs fichiers, la manière classique est d’utiliser une boucle
mardi 5 mai 2009
zmv
Lorsque que vous devez renommer plusieurs fichiers, la manière classique est d’utiliser une boucle
mardi 5 mai 2009
zmv
Lorsque que vous devez renommer plusieurs fichiers, la manière classique est d’utiliser une boucle
Maintenant, pensez zmv !% zmv '(*) - (*) - (*).ogg' '$1/$2/$1 - $2 - $3.ogg'
mardi 5 mai 2009
Les alias
mardi 5 mai 2009
Les alias
Alias de suffixe
mardi 5 mai 2009
Les alias
Alias de suffixe
alias -s pem=”openssl x509 -noout -text -in”
mardi 5 mai 2009
Les alias
Alias de suffixe
alias -s pem=”openssl x509 -noout -text -in”
alias -s log=”tail -f”
mardi 5 mai 2009
Les alias
Alias de suffixe
alias -s pem=”openssl x509 -noout -text -in”
alias -s log=”tail -f”
Alias globaux
mardi 5 mai 2009
Les alias
Alias de suffixe
alias -s pem=”openssl x509 -noout -text -in”
alias -s log=”tail -f”
Alias globaux
alias -g L=”| less”
mardi 5 mai 2009
Historique partagé
Toutes les sessions partagent le même fichier d’historique
Très utile pour coupler avec la recherche d’historique !
mardi 5 mai 2009
Merci de votre attention !En savoir plus :http://www.zsh.org/ http://www.zshwiki.org/http://cli.asyd.net/mailto:[email protected]?Subject=subscribeirc://#[email protected]/irc://#[email protected]/
mardi 5 mai 2009