Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
zsh [Le 07/05/2009, 17:05]
213.95.41.13
zsh [Le 18/11/2023, 17:47] (Version actuelle)
moths-art [Complétion pour la commande killall] Le correctif est très vieux. Le tips ne sert plus
Ligne 1: Ligne 1:
-{{tag>zsh BROUILLON}}+{{tag>console shell }}
  
 ---- ----
Ligne 5: Ligne 5:
 ====== ZSH ====== ====== ZSH ======
  
-===== Présentation ===== +**Zsh** est un interpréteur de commandes ([[shell]]), tout comme [[bash]].
-Zsh est un interpréteur de commandes (shell), tout comme bash.+
 Il fournit une interface entre l'​utilisateur et le système. Il est indispensable d'​avoir un interpréteur de commandes pour utiliser un système GNU/Linux (et même tous les autres systèmes). Il fournit une interface entre l'​utilisateur et le système. Il est indispensable d'​avoir un interpréteur de commandes pour utiliser un système GNU/Linux (et même tous les autres systèmes).
-Le shell par défaut dans Ubuntu est bash, c'est un shell qui a bien des avantages (notamment pour les scripts), mais il est assez limité dans certaines fonctionnalités comme l'autocompletion.+Le shell par défaut dans Ubuntu est [[bash]], c'est un shell qui a bien des avantages (notamment pour les scripts), mais il est assez limité dans certaines fonctionnalités comme l'autocomplétion.
 Zsh est plutôt orienté pour l'​interactivité avec l'​utilisateur. Zsh est plutôt orienté pour l'​interactivité avec l'​utilisateur.
 +
 ===== Installation ===== ===== Installation =====
-[[:​tutoriel:​comment_installer_un_paquet|installez le paquet]] **zsh** 
  
-Vous pouvez le lancer comme ceci  +[[:tutoriel:​comment_installer_un_paquet|Installez le paquet]] **[[apt>zsh|zsh]]**.
-  ​[[apt://zsh]+
  
-Pour définir zsh comme shell par défaut (lorsque vous vous connectez dans un terminal (ou un emulateur ​de terminal), on peut utiliser l'​utilitaire chsh :+===== Utilisation ===== 
 + 
 +Vous pouvez le lancer comme ceci : 
 +  zsh 
 + 
 +Pour définir zsh comme shell par défaut (lorsque vous vous connectez dans un [[terminal]] (ou un émulateur ​de terminal), on peut utiliser l'​utilitaire chsh :
   chsh   chsh
  
 On vous demande quel shell utiliser, répondez /bin/zsh (en toutes lettres). On vous demande quel shell utiliser, répondez /bin/zsh (en toutes lettres).
-Puis déconnectez vous et reconnectez ​vous. Et voilà, vous êtes sur zsh !+<note important>​ 
 +Vérifiez bien votre saisie avant de valider, sinon vous risquez d'​avoir un terminal non fonctionnel. 
 +</​note>​
  
-Si vous ne possedez ​pas les droit administrateur ​sur l'​ordinateur que vous utilisez, il vous suffit d'​inscrire ceci dans votre ~/.bashrc+Puis déconnectez-vous et reconnectez-vous. Et voilà, vous êtes sur zsh ! 
 + 
 +Si vous ne possédez ​pas les droits d'​administration ​sur l'​ordinateur que vous utilisez, il vous suffit d'​inscrire ceci dans votre fichier **~/.bashrc**
  
   exec zsh   exec zsh
 +  ​
 +<note tip>
 +Si gnome-terminal ne se lance pas avec zsh et continue de fonctionner avec bash alors il faut aller dans les préférences du profil dans le menu “Édition”.
 +Cocher “Exécuter une commande personnalisée de mon shell” dans l'​onglet “Titre et Commande”. Mettre zsh comme commande personnalisée.
 +</​note>​
  
 ===== Les fichiers de configuration ===== ===== Les fichiers de configuration =====
Ligne 33: Ligne 45:
  
 Il est possible que les distributions fournissent un ''/​etc/​zshrc''​ donc je vous conseille d'​aller voir ce qu'il y a dans ce fichier. Il est possible que les distributions fournissent un ''/​etc/​zshrc''​ donc je vous conseille d'​aller voir ce qu'il y a dans ce fichier.
-Pour toutes les modifications que vous ferez dans les fichiers de configuration,​ il faut lancer la commande ​"source" ​sur les fichiers que vous avez modifiés pour que ça prenne effet, par exemple :+Pour toutes les modifications que vous ferez dans les fichiers de configuration,​ il faut lancer la commande ​source” sur les fichiers que vous avez modifiés pour que ça prenne effet, par exemple :
   source ~/.zshrc   source ~/.zshrc
  
-Toutes les commandes qui vont être données peuvent être tapées directement dans le shell, mais pour qu'​elles prennent effet lors de la connexion au shell il faut les écrire dans un des fichiers de configuration (/​etc/​zsh/​zshrc ou ~/.zshrc) +Toutes les commandes qui vont être données peuvent être tapées directement dans le shell, mais pour qu'​elles prennent effet lors de la connexion au shell il faut les écrire dans un des fichiers de configuration (''​/​etc/​zsh/​zshrc'' ​ou ''​~/.zshrc''​)
- +
-Pour les feignants, il y a un fichier de configuration tout prêt en fin de page. LOL  +
- +
- +
  
 +Pour les feignants, il y a un fichier de configuration tout prêt en fin de page.
  
 ==== Complétion ==== ==== Complétion ====
Ligne 48: Ligne 56:
 La complétion sous Zsh est très avancée. Par défaut, vous avez par exemple : La complétion sous Zsh est très avancée. Par défaut, vous avez par exemple :
  
-  * Complétion sur les noms de domaines. Par exemple, après ssh <​TAB>,​ zsh complétera parmi les noms de domaines dans /etc/hosts, .ssh/ etc. , et même après +  * Complétion sur les noms de domaines. Par exemple, après ​''​ssh <TAB>''​, zsh complétera parmi les noms de domaines dans ''​/etc/hosts''​''​.ssh/'', ​etc. , et même après ​''​scp fichier user@domaine:​~/​ <TAB>''​, zsh complètera par les noms de fichiers sur le serveur
-scp fichier user@domaine:​~/​ <​TAB>,​ zsh complètera par les noms de fichiers sur le serveur+
  
-  * Complétion après make par les cibles ​possible ​du makefile+  * Complétion après ​''​make'' ​par les cibles ​possibles ​du Makefile
  
-  * Complétion sur les options des programmes, avec la description de celles-ci. Essayez par exemple mplayer -v <TAB>+  * Complétion sur les options des programmes, avec la description de celles-ci. Essayez par exemple ​''​mplayer -v <TAB>''​
  
   * Complétion sur les pages de manuel   * Complétion sur les pages de manuel
  
-  * ... et bien d'​autres+  * … et bien d'​autres
  
 Ajoutons que cette complétion est entièrement configurable : Ajoutons que cette complétion est entièrement configurable :
Ligne 72: Ligne 79:
   zstyle ':​completion:​*'​ select-prompt %SScrolling active: current selection at %p%s   zstyle ':​completion:​*'​ select-prompt %SScrolling active: current selection at %p%s
  
-Pour éviter de proposer un élément déjà présent lors d'un cp, mv ou rm :+Pour éviter de proposer un élément déjà présent lors d'​un ​''​cp''​''​mv'' ​ou ''​rm'' ​:
   zstyle ':​completion:​*:​rm:​*'​ ignore-line yes   zstyle ':​completion:​*:​rm:​*'​ ignore-line yes
   zstyle ':​completion:​*:​mv:​*'​ ignore-line yes   zstyle ':​completion:​*:​mv:​*'​ ignore-line yes
   zstyle ':​completion:​*:​cp:​*'​ ignore-line yes   zstyle ':​completion:​*:​cp:​*'​ ignore-line yes
  
-Sur Ubuntu, on utilise souvent ''​sudo'',​ donc il peut être intéressant d'​avoir la complétion lorsque la commande n'est pas dans votre $PATH :+Sur Ubuntu, on utilise souvent ''​sudo'' ​(doc [[sudo]]), donc il peut être intéressant d'​avoir la complétion lorsque la commande n'est pas dans votre $PATH :
   zstyle ':​completion:​*:​sudo:​*'​ command-path /​usr/​local/​sbin /​usr/​local/​bin \   zstyle ':​completion:​*:​sudo:​*'​ command-path /​usr/​local/​sbin /​usr/​local/​bin \
                              /​usr/​sbin /usr/bin /sbin /bin /​usr/​X11R6/​bin                              /​usr/​sbin /usr/bin /sbin /bin /​usr/​X11R6/​bin
- 
  
 Zsh supporte aussi les fonctions de complétion de bash, pour les utiliser : Zsh supporte aussi les fonctions de complétion de bash, pour les utiliser :
Ligne 86: Ligne 92:
   bashcompinit   bashcompinit
  
 +Ensuite il suffit de "​sourcer"​ les fichiers de configuration de bash. (''/​etc/​profile'' ​ ou ''​~/​.bashrc''​)
  
-Ensuite il suffit de "​sourcer"​ les fichiers de configuration de bash. (/​etc/​profile ​ ou ~/​.bashrc) +Zsh peut aussi vous corriger si vous tapez ''​sl'' ​à la place de ''​ls'' ​(sauf si vous avez installé sl LOL )
- +
-Zsh peut aussi vous corriger si vous tapez sl à la place de ls (sauf si vous avez installé sl LOL )+
   setopt correctall   setopt correctall
- 
- 
  
 ==== Le prompt ==== ==== Le prompt ====
  
-Le prompt est ce que vous voyezpar exemple :+Le prompt est ce que vous voyezpar exemple :
   vous@machine ~/src %   vous@machine ~/src %
  
 Ce prompt est contenu dans une (ou plusieurs) variables d'​environnements. La plus utilisée est certainement $PS1 Ce prompt est contenu dans une (ou plusieurs) variables d'​environnements. La plus utilisée est certainement $PS1
  
-Zsh fournit des prompts ​prêt à l'​emploi dans /​usr/​share/​zsh/​VERSION_DE_ZSH/​functions/​Prompts.+Zsh fournit des prompts ​prêts ​à l'​emploi dans /​usr/​share/​zsh/​functions/​Prompts.
 Pour les activer : Pour les activer :
   autoload -U promptinit   autoload -U promptinit
   promptinit   promptinit
-Vous pouvez avoir une liste des themes ​comme ceci :+ 
 +Vous pouvez avoir une liste des thèmes ​comme ceci :
   prompt -l   prompt -l
 +
 Mais aussi un aperçu de tous les prompts disponibles : Mais aussi un aperçu de tous les prompts disponibles :
   prompt -p   prompt -p
Ligne 113: Ligne 118:
   prompt NOM_DU_THEME   prompt NOM_DU_THEME
  
-Si vous voulez faire votre prompt vous mêmes, voyez cette page : [[http://www.gentoo.org/doc/fr/zsh.xml#​doc_chap2]]+Si vous voulez faire votre prompt vous mêmes, voyez cette page : [[https://wiki.archlinux.org/index.php/zsh|Arch Linux ZSH]]
  
 ==== Globbing ==== ==== Globbing ====
  
-La fonctionnalité qui vous fera oublier find 8-)+La fonctionnalité qui vous fera oublier ​[[tutoriel/​console_commandes_de_base#​find|find]] ​8-)
  
 Un exemple : <​code>​rm **/​*toto*</​code>​ supprimera tous les fichiers comprenant le mot toto dans le répertoire courant, et ensuite en cherchant récursivement dans tous les sous-dossiers. Un exemple : <​code>​rm **/​*toto*</​code>​ supprimera tous les fichiers comprenant le mot toto dans le répertoire courant, et ensuite en cherchant récursivement dans tous les sous-dossiers.
Ligne 125: Ligne 130:
 ==== ZLE ==== ==== ZLE ====
  
-ZLE désigne la zone dans laquelle vous tapez vos commandes. Vous pouvez utiliser les raccourcis claviers de vi ou d'emacs, au choix, et définir très facilement vos propres raccourcis. ​+ZLE désigne la zone dans laquelle vous tapez vos commandes. Vous pouvez utiliser les raccourcis claviers de [[:​Vim]] ​ou d'[[:Emacs]], au choix, et définir très facilement vos propres raccourcis. ​
 En vrac, quelques raccourcis par défaut : En vrac, quelques raccourcis par défaut :
  
   * <​Echap>​h va appeler la page de manuel du premier mot que vous êtes en train de taper   * <​Echap>​h va appeler la page de manuel du premier mot que vous êtes en train de taper
-  * <​Echap>​q va copier la ligne que vous étiez en train de taper en mémoire, pour vous laisser devant une ligne le vide. Vous pouvez alors rentrer une nouvelle commande, lorsque celle-ci sera terminée, zsh vous affichera la ligne en mémoire. +  * <​Echap>​q va copier la ligne que vous étiez en train de taper en mémoire, pour vous laisser devant une ligne vide. Vous pouvez alors rentrer une nouvelle commande, lorsque celle-ci sera terminée, zsh vous affichera la ligne en mémoire.
  
 ==== Alias ==== ==== Alias ====
  
-ZSH permet comme bash de définir des "alias", c'est à dire des commandes définies à partir d'​autres commandes, par exemple :+ZSH permetcomme bashde définir des alias, cest-à-dire des commandes définies à partir d'​autres commandes, par exemple :
  
   alias la="ls -a"   alias la="ls -a"
  
-Permet de définir une commande la qui seras identique à ls -a (liste les fichier ​du répertoire ​passer ​en paramètre en incluant les fichiers cachés).+Permet de définir une commande ​''​la'' ​qui seras identique à ''​ls -a'' ​(liste les fichiers ​du répertoire ​passé ​en paramètreen incluant les fichiers cachés)
 + 
 +Pour pouvoir se servir en permanence de ces alias, il faut qu'ils soient inscrits dans le fichier ~/.zshrc.
  
-Pour pouvoir se servir en permanence de ces alias il faut qu'ils soient inscrit dans le fichier ~/.zshrc.+=== Alias suffixe ===
  
-Mais zsh va plus loin en permettant des alias sur les suffixes. L'​idée ​initiales viens du fais que pour certains types de fichiers nous exécutons toujours la même commande. Par exemple un fichier PDF seras généralement lu avec votre lecteur PDF favori. Passons à la pratique ​à fin d'​être plus claire.+Mais zsh va plus loin en permettant des alias sur les suffixes. L'​idée ​initiale vient du fait que pour certains types de fichiers nous exécutons toujours la même commande. Par exempleun fichier PDF sera généralement lu avec votre lecteur PDF favori. Passons à la pratique ​afin d'​être plus clair.
  
   alias -s pdf="​evince "   alias -s pdf="​evince "
  
-Voici la création de l'​alias pour tout les fichiers dont le nom est ''​nom.pdf''​ +Voici la création de l'​alias pour tous les fichiers dont le nom est ''​nom.pdf''​ 
-Ensuite il suffit de l'​utiliser comme s'il s'​agissait un executable.+Ensuite il suffit de l'​utiliser comme s'il s'​agissait un exécutable.
  
   ./​fichier.pdf   ./​fichier.pdf
  
 Cela va lancer evince pour ouvrir votre fichier PDF. Cela va lancer evince pour ouvrir votre fichier PDF.
 +
 +=== Alias globaux ===
 +
 +Zsh permet également de définir des alias “globaux” qui s’exécuteront quelle que soit leur position dans la ligne de commande, ainsi avec l'​alias :
 +
 +<​code>​ alias -g G=' | grep '</​code>​
 +
 +la commande :
 +
 +<​code>​ ls /bin G zsh</​code>​
 +
 +remplacera :
 +
 +<​code>​ ls /bin | grep zsh</​code>​
  
 ===== Un exemple de fichier zshrc ===== ===== Un exemple de fichier zshrc =====
  
-<​code>​+<​code ​bash>
 #​!/​usr/​bin/​env zsh #​!/​usr/​bin/​env zsh
 #   ​_________ ​ _   _ ____   ​____ ​ #   ​_________ ​ _   _ ____   ​____ ​
Ligne 210: Ligne 230:
 </​code>​ </​code>​
  
 +===== Une configuration avancée =====
  
-===== Autres ressources sur Zsh =====+Pour ceux qui ne souhaitent pas se plonger dans les fichiers de configurations de zsh, mais qui souhaitent tout de même avoir une configuration agréable à utiliser, je vous propose la configuration suivante : 
 +<​code>​ for pkg in zshrc zshenv zlogin zlogout dir_colors ;do sudo wget -cO /​etc/​zsh/​$pkg https://​formation-debian.viarezo.fr/​fichiers-config/​$pkg ;done 
 +sudo cp /​etc/​zsh/​dir_colors ​ /​etc/</​code>​
  
-Quelques documentations ici +Vous aurez un prompt en couleur, des raccourcis clavier similaires à ceux d'[[:Emacs]], ainsi qu'à ceux de [[:Vim]], et de nombreuses autres possibilités. 
-  + 
-  * [[http://wiki.gcu.info/doku.php?id=unix:zsh_le_z_shell]] +===== Rendre ZSH plus sexy ===== 
-  * [[http://www.gentoo.org/​doc/fr/zsh.xml]] [FR] + 
-  * [[http://​zshwiki.org/​home/​]] [EN+Vous pouvez utiliser des thèmes de terminal avec [[Oh-my-zsh|Oh my zsh]]. 
-  * [[http://​cli.asyd.net/​home/​shell/​zsh/​racine]] [FR]+ 
 +===== Résolution de problèmes ===== 
 + 
 +  * Les touches home, fin, ctrl+[aerl] et autres ne fonctionnent pas correctement,​ affichent des caractères bizarre \\ peut-être en pensant bien faire, vous avez sélectionné,​ lors de la configuration initiale, les raccourcis type vi, et trouverez donc certainement dans votre ~/.zshrc la directive bindkey -vDans ce cas, essayez de remplacer cette directive par bindkey -e qui correspond aux raccourcis de type [[:Emacs]] et qui devraient restaurer le comportement attendu. 
 + 
 +==== Raccourcis clavier du terminal ==== 
 + 
 +Si ça ne résout pas le bug (cf « résolution de problèmes »), insérer les lignes suivantes dans ~/​.zshrc ​: 
 + 
 +<code bash> 
 +# Touche de commande 
 +bindkey "​\e[H"​ beginning-of-line # Début 
 +bindkey "​\e[F"​ end-of-line # Fin 
 +bindkey "​\e[3~"​ delete-char 
 +bindkey "​^R"​ history-incremental-search-backward # Rechercher 
 +</​code>​ 
 + 
 +<note tip>​Astuce,​ pour connaître les raccourcis clavier de votre terminal, taper la commande : 
 + 
 +<code bash> 
 +cat -v 
 +</​code>​ 
 + 
 +et taper sur la touche du clavier désirée pour connaître son bindkey, vous verrez que ce dernier ne correspond pas à ceux listés par : 
 + 
 +<code bash> 
 +bindkey 
 +</​code>​ 
 + 
 +À noter, que vous pouvez directement connaître le bindkey via Vim : passer en mode insertion et taper Ctrl V</​note>​ 
 + 
 + 
 +===== Voir aussi ===== 
 + 
 +  * [[Oh-my-zsh|Oh my zsh]] 
 +  ​* **(en)** [[https://wiki.gentoo.org/​wiki/Zsh|Guide sur l'​installation et la configuration de zsh]] sur Gentoo.org 
 +  ​* **(en)** [[https://​zshwiki.org/​home/​]] 
 +  *  **(en)** ​[[https://​hackernoon.com/​macbook-my-command-line-utilities-f8a121c3b019#​.87unujp9a|Description des usages de la commande]
 +  ​* **(fr)** [[http://​cli.asyd.net/​home/​shell/​zsh/​racine]]
  
 ---- ----
  
-Contributeurs : +//Contributeurs : [[:​utilisateurs/​yannick_lm|yannick_lm]][[:​utilisateurs/​philpep-tlse|philpep-tlse]], [[:​utilisateurs/​geenux|geenux]],​ [[:​utilisateurs/​malko25|malko25]],​ [[:​utilisateurs:​david96|david96]].//​ 
-[[:​utilisateurs/​yannick_lm|yannick_lm]] +
-[[:​utilisateurs/​philpep-tlse|philpep-tlse]]+
  • zsh.1241708723.txt.gz
  • Dernière modification: Le 07/05/2009, 17:05
  • par 213.95.41.13