Zsh Rmll

Preview:

DESCRIPTION

Introduction à ZSH et les bonnes pratiques du shell

Citation preview

zsh : utilisation interactiveBruno Bonfils, <asyd@asyd.net>

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:shell-requests@asyd.net?Subject=subscribeirc://#zsh@irc.freenode.net/irc://#zsh-fr@irc.freenode.net/

mardi 5 mai 2009

Recommended