En tant qu'utilisateur Linux, je n'ai toujours utilisé que bash, car c'était la valeur par défaut pour chaque distribution que j'utilisais. Les personnes utilisant d'autres systèmes Unix tels que BSD semblent en utiliser beaucoup plus fréquemment. Pour apprendre un peu plus, j'ai décidé d'essayer zsh.
En tant qu'utilisateur bash:
- Quelles fonctionnalités vais-je manquer?
- Et que dois-je rechercher?
Réponses:
Il y a déjà eu pas mal d'activité sur le sujet sur d'autres sites Stack Exchange. Mon expérience de basculement de bash à zsh, autant que je puisse m'en souvenir (c'était il y a des années²), c'est que je n'ai rien oublié. J'ai beaucoup gagné; Voici ce que je pense être les fonctionnalités simples spécifiques à zsh que j'utilise le plus:
La fonctionnalité zsh qui me manque le plus lorsque j'utilise occasionnellement bash est autocd: en zsh, exécuter un répertoire signifie le modifier, à condition que vous
autocd
activiez l' option.Une autre fonctionnalité très utile est la fantaisie Globbing. Les caractères
hiéroglyphessont un peu difficiles à retenir mais extrêmement pratiques (comme dans, il est souvent plus rapide de les rechercher que d'écrire lafind
commande équivalente ). Quelques exemples parmi les plus simples:foo*~*.bak
= toutes les correspondancesfoo*
sauf celles correspondant*.bak
foo*(.)
= uniquement les fichiers normaux correspondantfoo*
foo*(/)
= uniquement les répertoires correspondantsfoo*
foo*(-@)
= uniquement les liens symboliques pendants correspondantfoo*
foo*(om[1,10])
= les 10 fichiers les plus récents correspondantfoo*
foo*(Lm+1)
= uniquement les fichiers de taille> 1 Mo = dans le répertoire et tous ses éléments. sous-répertoires, récursivement⁴dir/**/foo*
foo*
dir
Pour les
zmv
renommés fantaisistes, la commande intégrée peut être pratique. Par exemple, pour copier chaquefile
versfile.bak
:zmv -C '(*)(#q.)' '$1.bak'
Bash et zsh ont tous deux un système de complétion décent qui doit être activé explicitement (
. /etc/bash_completion
ouautoload -U compinit; compinit
). Zsh est beaucoup plus configurable et généralement plus sophistiqué.Si vous exécutez zsh sans le
.zshrc
, il lance un menu interactif qui vous permet de choisir les options de configuration. (Certaines distributions peuvent désactiver cetteautoload zsh-newuser-install; zsh-newuser-install
option ; dans ce cas, exécutez-la .) Je vous recommande d'activer les options d'historique recommandées, d'activer la complétion («nouveau style») et d'activer les «options de shell communes», à l'exception debeep
. Plus tard, configurez plus d’options à mesure que vous les découvrez.² À l’époque, l’achèvement programmable était la fonction la plus meurtrière de zsh, mais elle l’a acquis peu de temps après.
Les fonctionnalités que bash n'a acquises que dans la version 4 (elles ne sont donc toujours pas disponibles sur de nombreux systèmes) sont de type plus petit.
la source
autocd
fonctionnalité décrite ci-dessus. Activer la fonctionnalité à l'aide de la commandeshopt -s autocd
. Ensuite, la fonctionnalité fonctionne comme vous l'avez décrit.where
commande intégrée , à ne pas confondre avec lawhich
commande.-exec
un shell pour des choses comme la sélection avece
et un pipeline dans des outils commesort
etsed
pour la réécrituree
et le tri). Beaucoup plus verbalement, bien sûr.De plus, la complétion par défaut des onglets est meilleure que bash ... par exemple ...
~/.e.d
TAB va s'étendre à~/.emacs.d/
zsh, bash va juste émettre un bip.la source
setopt
option non par défaut utilisez-vous pour cela (le cas échéant)?_-.
défini comme un joker.zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
. Voir stackoverflow.com/q/7906078/311660zsh
vous permet de modifier une commande multiligne (voir Editeur de ligne zsh ), mais pas Bash. Si vous essayez la même astuce (Ctrl-p
), bash récupère la dernière commande.la source
Bash a la particularité de pouvoir ouvrir des ports en utilisant
ou
Cependant, il est désactivé dans Debian car il est perçu comme un obstacle (si le chemin existe réellement) et sort du cadre de ce qu’un shell devrait faire. Plus d'informations [liste de diffusion debian]
la source
Qui - amélioré dans zsh
La
which
commande dans bash ne révèle que l'emplacement d'une commande.En Zsh
which
révélera la définition d'unalias
, la source d'unfunction
et l'emplacement d'une commande.Disons que nous avions un alias de shell:
Dans Bash si on demandait:
which gg
le résultat serait nulEn Zsh:
which gg
va nous donner ...Disons que nous avons une fonction shell:
Dans Bash si nous demandions:
which hello
le résultat serait nul.En Zsh:
which hello
va nous donner ...la source
type
commande (intégrée). Et juste pour nitpick:which
est une commande externe, pas une bash intégrée.zsh - une coque complète
il y en a beaucoup, en lisant
zshcontrib(1)
un peut détecter deux versions de jeuxautoload
-ablestetris
(l'autre avecncurses
)zsh
en concurrence avecemacs
, pour compléter (comme décrit).=
Je voudrais mentionner le
=
mot clé, qui peut causer une irritation aveccurl
(les URL ont généralement?var=val
en eux; mais il estunsetopt
-able, je pense):q file =less
(gentoo
) décide deq file $(which less)
=
étend le chemin complet de la commande en question.autres goodies
d'autres choses, hors de l'esprit, sont la bonne invite
RPS1=%d
(pour afficher$PWD
en style), Alt + H(run-help
ie.man
), Alt + ? (which-command
)vared
, etzed
(autoload
fonction), comme Emacs 'minibuffer-like Alt + Xpour exécuter des widgets sans les lier, alias global et suffixe, durée d’achèvement de la commande de suivi d’historique étendu-m
et-regex
correspondeurs, émulation de shell (par exemplecsh
,ksh
avecemulate
) etautoload
run-help
avec des extraits de fichier pour les éléments intégrés.des lamentations
Je pense que la plupart des fonctionnalités, si ce n'est toutes, ont été implémentées il y a longtemps, et lors de la lecture du journal des modifications, il n'y a pas de changements majeurs ni d'ajout de nouvelles fonctionnalités, ce qui est très triste (il n'y a plus rien à explorer et à découvrir).
bash
semble être plus distribué dansreadline
(par opposition àzle
) etgnu history
dans l'esprit linux; Par exemple, les fonctions readline et les associations de touches peuvent être appliquées globalement (telles que conservées dans~/.inputrc
et/etc/inputrc
) si elles ne sont pas écrasées par bashbind
.conclusion
Personnellement, je pense
emacs
(surtout en ce quiemacs-nox
concerne la perspective (la version actuelle?) Être la source d'inspiration d'un logiciel exceptionnel, comme par exemple,zsh
ettmux
a très bien fait de donner l'exemple dans une telle implémentation; pour les personnes appréciant sa valeur (au niveau de ne pas avoir besoin / selon leX
serveur). Le shell Unix est assez puissant, et sa continuité et sa cohérence suffisent pour un flux de travail et une productivité appropriés (en informatique globale).la source