Deprecated: Assigning the return value of new by reference is deprecated in /srv/www/u-classroom.net/wiki/inc/parserutils.php on line 208

Deprecated: Assigning the return value of new by reference is deprecated in /srv/www/u-classroom.net/wiki/inc/parserutils.php on line 211

Deprecated: Assigning the return value of new by reference is deprecated in /srv/www/u-classroom.net/wiki/inc/parserutils.php on line 421

Deprecated: Assigning the return value of new by reference is deprecated in /srv/www/u-classroom.net/wiki/inc/parserutils.php on line 594

Deprecated: Function split() is deprecated in /srv/www/u-classroom.net/wiki/inc/auth.php on line 154

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/u-classroom.net/wiki/inc/parserutils.php:208) in /srv/www/u-classroom.net/wiki/inc/auth.php on line 245

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/u-classroom.net/wiki/inc/parserutils.php:208) in /srv/www/u-classroom.net/wiki/inc/actions.php on line 370

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/u-classroom.net/wiki/inc/parserutils.php:208) in /srv/www/u-classroom.net/wiki/inc/actions.php on line 383
cours:zsh
Table des matières

ZSH

Introduction

Zsh a été commencé en 90 par Paul Falstad, il était étudiant a Princeton… Un de ses profs s'appelait Zhong Shao, sur le LAN de l'université, son login était un zsh. l'histoire pouvait commencer…

Prérequis

Pourquoi zsh ?

Parce que:

Premiers pas

Donc ouvrez un terminal et

$ zsh

zsh-newuser-install se lance, ce qui n'est pas idéal. Car zsh sans config c'est dur.

Récupération d'une config pour zsh

On va donc utiliser une config de zsh “par défaut”… Pour celà, vous fermez ce terminal et en ouvrez un autre (q + exit). Ne faites pas de $ touch ~/.zshrc, attendez d'avoir telecharge une bonne configuration.

$ cd
$ svn checkout http://svn.asyd.net/svn/zsh/trunk .zsh
$ ln -s .zsh/zshrc .zshrc

Note : la config que nous allons utiliser est de asyd, il l'a commencée en 2001, et la maintient depuis.

Lancer zsh :

$ zsh

Arrivé a ce point , on a tous un shell de cette forme :

"01:14 (user~host) /home/user
%                                                          [0.11 0.16 - 41% 3%]"

Note : [charge 1 min charge 5 min - charge RAM (en %) charge SWAP (en %)]

Configuration

Pour le prompt, changer les couleurs, eventuelement les infos et leurs dispositions, voir dans rc.os/prompt.zsh puis rc.os. La définition des couleurs se fait dans c.host/default.zsh

Utilisation

Exemples

% /usr # 3 frappes gagnées par changement de repertoire
% for i in 1 2 3 ; echo $i  # plus besoin de do et done

Note : Très pratique, bien sûr la forme bash reste compatible avec zsh. D'ailleurs zsh est entièrement compatible avec bash.

Completion

La configuration par défaut n'est pas terrible , et la config d'asyd ne la change pas, je vous ai donc preparé une config.Editez le fichier

~/.zshrc

pour y ajouter :

#Completion
zstyle ':completion:*' completer _expand _complete _approximate
zstyle ':completion:*:expand:*' tag-order all-expansions
zstyle ':completion:*' ignore-parents parent pwd
zstyle ':completion:*' list-colors ''
zstyle ':completion:*' menu select=1
zstyle ':completion:*' original true
zstyle ':completion:*:approximate:*' max-errors par 'reply=( $(( ($#PREFIX+$#SUFFIX)/3 )) numeric )'

Puis pour prendre en compte les modifications :

	
% source .zshrc
% source ~/.zsh

La première frappe sur <TAB> donne le même résultat qu'avec bash par contre les frappes suivantes permettent de parcourir les différents choix proposés.

Pour sortir de la complétion sans choix utilisez <ctrl>+c ou <backspace>.

Le shell propose seulement les répertoires où tu es susceptible d'aller et pas celui où l'on se trouve déjà. Pour changer celà, if faut supprimer

zstyle ':completion:*' ignore-parents parent pwd

du fichier .zshrc.

% mplayer /un/dossier/avec/des/video/<tab>

Ici seules les vidéos sont listées. De même avec votre éditeur de texte, zsh complète avec les fichiers textes seulement.Tester :

% apt-cache <tab>
% apt-get ins<tab>
% apt-get install opena<tab>
% ssh <début nom host><tab>

Note : Pour comprendre le fonctionnement de l'autocomplétion aller voir dans .zsh/rc et rc.osVous en avez pour un moment, zsh corrige les typo, travaille avec les users et les groupes. zsh connait énormément de patrons de commandes.Tester :

% cat `locate Xorg.0.log`<tab>  # zsh fait l'autocomplétion sur le résultat du locate et affiche directement le résultat
% print $(( 1 + 2 ))tab  # zsh sait aussi compter

Note : Nous sommes toujours sur la même ligne, nous n'avons pas fait <entrée> depuis tout à l'heure.Tester :

% /var/*<tab>

Globbing

Tout a l'heure on a utilisé locate pour retrouver Xorg.0.log mais nous aurions pu laisser zsh chercher…

Exemple :

% cat /**/Xorg.0.log # être patient, sinon <ctrl>+c, <ctrl>+q, l'exemple est un peu extrême

Note :

% echo *(/)  # retourne juste les répertoires
% echo */    # sans les parenthèse zsh retourne aussi les sim-links
% echo *(^/) # retourne juste les fichiers

Note : Avec (@) on filtre sur les liens symboliquesTester :

% mplayer ~/musique/**/*.(flac|wac|aiff)
% mplayer  ~/musique/**/*.(flac|wav|aiff)~*Police*

Le ~ permet d'enlever des éléments de la sélection.

% mplayer ~/musique/**/*.(flac|wav|aiff)~*Police*~[pP]ink*
# Sans les morceaux dont le nom de fichier comporte Police et sans les morceaux dont le nom commence par Pink ou pink.

Les tableaux

Avec le bash on connaissait 2 types : les nombres et les chaines de caractères. Avec zsh on en ajoute un : le tableau. Un tableau est un groupement de variables.

Exemple :

% ma_musique=(morceau1.mp3 /media/partage/unautremorceau.mp3)

Ceci crée un tableau ma_musique.

% echo $ma_musique

Ceci affiche le contenu du tableau.

On peut ajouter du contenu au tableau

% ma_musique=($ma_musique encoreunmorceau.flac)

Ou directement

% ma_musique[5]=encoreun.flac

Note : * contrairement à la norme en vigueur dans les beaux langages, le numérotage du tableau commence à 1. * les tableaux sont infinis : on peut laisser du vide dans le tableaux ou le commencer par la fin.Ecouter de la musique :

% mplayer $ma_musique

Ou par ordre alphabétique :

% mplayer $(print $ma_musique | sort)

Note : Nombre d'éléments d'un tableau : ${#ma_musique}

Liste aléatoire :

% mplayer $ma_musique[$RANDOM%${#ma_musique}]
% ma_musique=( /media/*/musique/**/*.(mp3|flac|ogg) ; while true ; do mplayer $ma_musique[$RANDOM%${#ma_musique}] ; done

Jeux

Libre à vous d'ajouter la ligne “autoload tetris” `a votre .zshrc. Puis <alt>+x et sasissez 'tetris'.

Soucis

La touche <suppr> donne une tilde, pour y remédier ajoutez au fichier .zshrc :

autoload zkbd
[[ ! -f ${ZDOTDIR:-$HOME}/.zkbd/$TERM-$VENDOR-$OSTYPE ]] && zkbd
source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-$VENDOR-$OSTYPE

Puis

% source ~/.zshrc

Pour finir

Pour mettre zsh en shell par défaut, il faut utiliser la commande chsh. Le chemin du shell est /bin/zsh

Bibliographie

Le manuel est gigantesque et il est eclaté en une vingtaine de page!