Vaut-il la peine de passer à zsh pour une utilisation occasionnelle? [fermé]

192

Le shell par défaut de Mac OS X est bash, que je suis généralement heureux d'utiliser. Je prends cela pour acquis. Ce serait vraiment bien s'il complétait automatiquement plus de choses , et j'ai entendu de bonnes choses zshà cet égard. Mais je n'ai pas vraiment envie de passer des heures à manipuler les paramètres pour améliorer mon utilisation de la ligne de commande par une petite quantité, car ma vie sur la ligne de commande n'est pas si mauvaise.

(Si je comprends bien, bashpeut également être configuré pour se compléter automatiquement de manière plus intelligente. C'est la configuration qui ne me passionne pas tellement.)

Le passage à zsh, même dans un petit nombre de cas, me facilitera-t-il la vie? Ou est-ce seulement une meilleure coque si vous prenez le temps d'apprendre pourquoi c'est mieux? (Les exemples seraient bien aussi :))


@ Rodney Amato & @ Vulcan Eager donnent deux bonnes raisons de s'en tenir bashet de passer respectivement àzsh . On dirait que je vais devoir enquêter sur les deux! tant pis:)

Y a-t-il quelqu'un avec une opinion des deux côtés de l'argument?

Will Robertson
la source
14
Puisque zsh est (presque) un sur-ensemble de bash, vous pouvez commencer par passer à zsh et l'utiliser comme bash. Ensuite, vous pouvez apprendre les gemmes zsh un peu à la fois.
orip
Si vous avez un peu de personnalisation bash et que vous utilisez souvent le shell à l'intérieur d'emacs, cela ne semble pas anodin. J'ai posté une question connexe: stackoverflow.com/questions/13326879/…
justingordon
La seule chose que je n'aime pas à propos de zsh est que (au moins sur Ubuntu) vous devrez le configurer vous-même la première fois que vous le démarrez (au lieu de fournir des valeurs par défaut saines que vous pourrez plus tard bricoler). Si vous pouvez surmonter cela, zsh est le meilleur!
zrajm le

Réponses:

68

Pour une utilisation occasionnelle, vous feriez probablement mieux de vous en tenir à bash et d'installer simplement la complétion bash.

L'installation est assez simple, récupérez le fichier bash-completion-20060301.tar.gz sur http://www.caliban.org/bash/index.shtml#completion et extrayez-le avec

tar -xzvf bash-completion-20060301.tar.gz

puis copiez le fichier bash_completion / bash_completion dans / etc avec

sudo cp bash_completion/bash_completion /etc

qui vous demandera votre mot de passe. Vous voudrez probablement créer un répertoire /etc/bash_completion.d pour tous les scripts d'achèvement supplémentaires (par exemple, j'ai le script d'achèvement git).

Une fois que cela est fait, la dernière étape consiste à vous assurer que le fichier .bash_profile de votre répertoire personnel contient

if [ -f /etc/bash_completion ]; then
     . /etc/bash_completion 
fi

dedans pour charger le fichier d'achèvement lorsque vous vous connectez.

Pour le tester, ouvrez simplement un nouveau terminal et essayez de compléter sur cvs et il devrait vous montrer les options cvs dans la liste des complétions.

Rodney Amato
la source
J'ai essayé ce qui précède, mais après chaque fois que je commence bash, j'obtiens 4 erreurs "opérateur unaire attendu" et 4 erreurs "trop ​​d'arguments".
AnnanFay
12
Si vous utilisez homebrew sur OSX, vous pouvez exécuter brew install bash-completion.
Nathan Villaescusa
3
Bash-Completion2 est meilleur! Sur OS X:brew tap homebrew/versions; brew install bash-completion2
Zearin
85

Personnellement, j'adore zsh.

En général, vous ne remarquerez probablement pas la différence entre it et bash, jusqu'à ce que vous vouliez faire rapidement des choses comme le globbing récursif:

  • **/*.c par exemple.

Ou utilisez des alias de suffixe pour associer des progs spécifiques à différents suffixes, afin de pouvoir les «exécuter» directement. L'alias ci-dessous vous permet "d'exécuter" un fichier source C à l'invite en tapant simplement ./my_program.c- ce qui fonctionnera exactement comme si vous aviez tapé vim ./my_program.c. (Sorte de l'équivalent d'un double-clic sur l'icône d'un fichier.)

  • alias -s c=vim

Ou imprimez les noms des fichiers modifiés aujourd'hui:

  • print *(e:age today now:)

Vous pouvez probablement faire toutes ces choses dans bash, mais mon expérience avec zsh est que s'il y a quelque chose que je veux faire, je peux probablement le trouver chez zsh-amoureux . Je trouve également le livre « From Bash to Z-Shell » très utile.

Jouer avec un nombre ahurissant d'options est également très amusant!

Mat
la source
1
Les deux premiers exemples ici ne signifient rien pour moi (un utilisateur occasionnel de bash envisageant de passer à zsh) - pourriez-vous préciser ce que signifie «globbing récursif», ou ce que vous entendez par «associer des progs spécifiques avec des suffixes différents»?
aaronsnoswell
5
@aaronsnoswell: "Globbing récursif" signifie rechercher un sous - répertoire et tous ses sous-répertoires pour les fichiers dont les noms correspondent à un modèle particulier. Bash ne fait pas cela par défaut; vous findou locatepour rechercher récursivement. Mais une fois que vous laissez un autre programme faire la recherche, vous perdez les frontières entre les noms (sauf si vous faites attention) ainsi que l'accès aux capacités internes de globbing du shell, et vous devez essentiellement soit vous contenter de ce que l'autre programme fournit, ou le tuyau de sa sortie par un programme comme grep, awkou sed(tout assez complexe dans leur propre droit).
cHao
6
De nos jours, vous pouvez définir l' globstaroption dans bash pour permettre la recherche récursive comme mentionné ci-dessus. À peu près sûr que ce n'était pas le cas lorsque cette réponse a été écrite.
cHao
Avec glob_star_shortin zsh, vous pouvez maintenant faire **.c, ce qui est interprété comme **/*.c.
PythonNut
J'utilise zsh 5.3et je reçois command not found: ageavecprint *(e:age today now:)
Timo
38

Basculez vers zsh. Vous aurez accès à:

  1. zmv: Vous pouvez faire: zmv '(*).mp3' '$1.wma'pour des milliers de fichiers.
  2. zcalc: Calculatrice extrêmement confortable, mieux que bc.
  3. zparseopts: Une ligne pour analyser les options complexes arbitraires données à votre script.
  4. autopushd: Vous pouvez toujours faire popdaprèscd pour revenir à votre répertoire précédent.
  5. Support en virgule flottante. Il est nécessaire de temps en temps.
  6. Prise en charge des hachages. Parfois, ils ne sont qu'une caractéristique clé.
Zearin
la source
17
L'exemple pour zmv doit être zmv '(*). Mp3' '$ 1.wma'. Veuillez le corriger, une telle présentation imprudente peut être déroutante et frustrante pour les inexpérimentés.
qed
5
@TravisBear autoload zcalc; zcalc(même si je tape moi-même pythonquand j'ai besoin d'une calculatrice).
Francisco
9
"autopushd: Vous pouvez toujours faire popd après cd pour revenir à votre répertoire précédent." N'est-ce pas l'équivalent de ça juste cd -?
minhaz1
4
zmvet zcalcne sont pas disponibles immédiatement. Il n'est pas clair qu'il zmvs'agit simplement de renommer des fichiers; Je pensais que vous aviez peut-être converti le format. Je ne sais pas ce que signifie même le support "hashes". Ce message semble être "utile" uniquement aux personnes qui connaissent déjà zsh.
mpen
1
@Mark Dans ce cas, "hash" est synonyme de "tableau associatif". bash4 a été publié quelques mois avant cette réponse.
chepner
13

Si tout ce que vous voulez utiliser ZSH est une meilleure finition, la configuration est assez simple. Placez ceci dans votre ~ / .zshrc:

autoload -U zutil      # [1]
autoload -U compinit   # [2]
autoload -U complist   # [3]
compinit

Cependant, cela vaut la peine de vérifier toutes les autres fonctionnalités intéressantes du ZSH. L'exemple ci-dessus vous donnera une invite assez simple avec une bonne complétion. Si vous ne voulez pas jouer avec les configurations, mais voulez voir ce que ZSH peut faire pour vous, recherchez "zshrc" sur Google et vous obtiendrez des configurations prêtes à l'emploi pour commencer.

jkramer
la source
3
Pour quel genre de choses cela ajoutera-t-il de l'achèvement? Je n'aime pas ajouter des choses au hasard sans savoir ce que cela fait.
mpen
6

zsh a une configuration de l'interface graphique de la console. Vous pouvez le configurer assez rapidement et facilement sans avoir à manipuler les fichiers de configuration. Je ne pense pas que vous aurez besoin de beaucoup de temps pour le configurer, probablement 10 secondes en utilisant simplement les valeurs par défaut, alors allez-y et essayez-le.

Staale
la source
10
Comment accéder à cette "interface graphique de la console"?
mpen
C'est généralement la première chose que vous voyez lorsque vous chargez zshsans aucun fichier dot associé. Pour l'obtenir manuellement, essayezautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Adam Katz
3

Staale parle d'un assistant comme le programme (CUI) qui s'exécute automatiquement la première fois que vous exécutez zsh. Répondez simplement à quelques questions, affichez / modifiez les paramètres par défaut et sa configuration pour vous.

IBM developerWorks a d'excellentes ressources sur zsh.

Je n'ai pas utilisé de fonctionnalités très avancées et jusqu'à présent je n'ai pas rencontré de différences sérieuses qui devraient gêner quelqu'un venant de bash.

Quelques exemples:

  • !? pattern <Tab> se complétera automatiquement à la dernière commande du modèle de correspondance d'historique. Très utile.

  • Vous pouvez configurer une invite sur le RHS. Une utilisation est de garder une invite de largeur fixe sur le côté gauche afin que toutes les commandes s'alignent bien tout en affichant le pwd (ou tout autre élément de largeur variable) comme invite de droite.

  • Vous pouvez rediriger l'entrée de plusieurs fichiers (mais pour essayer ceci): cat <fichier1 <fichier2 <fichier3

Agnel Kurian
la source