GNU/Linux >> Tutoriels Linux >  >> Linux

Quelles fonctionnalités sont dans Zsh et manquantes dans Bash, ou vice versa ?

En tant qu'utilisateur Linux, j'ai toujours utilisé bash car c'était la valeur par défaut sur toutes les distributions que j'utilisais. Les personnes utilisant d'autres systèmes Unix tels que BSD semblent utiliser d'autres shells beaucoup plus fréquemment. Afin d'en apprendre un peu plus, j'ai décidé d'essayer zsh.

En tant qu'utilisateur bash :

  • Quelles fonctionnalités vais-je manquer ?
  • Et à quoi dois-je faire attention ?

Réponse acceptée :

Pour une réponse plus détaillée, lisez https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh/361957#361957

Il y a déjà eu pas mal d'activité sur le sujet sur d'autres sites Stack Exchange. Mon expérience du passage de bash à zsh, pour autant que je m'en souvienne (c'était il y a des années²), c'est que je n'ai rien manqué. 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 :dans zsh, exécuter un répertoire signifie y accéder, à condition d'activer autocd option.⁴

  • Une autre fonctionnalité très utile est le globbing fantaisie. Les hiéroglyphes les caractères sont un peu difficiles à retenir mais extrêmement pratiques (comme dans, il est souvent plus rapide de les rechercher que d'écrire l'équivalent find commande). Quelques-uns des exemples les plus simples :
        foo*~*.bak =toutes les correspondances pour foo* sauf ceux correspondant à *.bak
        foo*(.) =uniquement les fichiers normaux correspondant à foo*
        foo*(/) =uniquement les répertoires correspondant à foo*
        foo*([email protected]) =uniquement les liens symboliques pendants correspondant à foo*
        foo*(om[1,10]) =les 10 fichiers les plus récents correspondant à foo*
        foo*(Lm+1) =uniquement les fichiers de taille> 1 Mo
        dir/**/foo* =foo* dans le répertoire dir et tous ses sous-répertoires, récursivement⁴

  • Pour les renommages fantaisistes, le zmv intégré peut être pratique. Par exemple, pour copier chaque file au file.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 ou autoload -U compinit; compinit ). Zsh est beaucoup plus configurable et généralement plus sophistiqué.

Si vous exécutez zsh sans .zshrc , il démarre un menu interactif qui vous permet de choisir les options de configuration. (Certaines distributions peuvent désactiver cela ; dans ce cas, exécutez autoload zsh-newuser-install; zsh-newuser-install .) Je recommande d'activer les options d'historique recommandées, d'activer la complétion ("nouveau style") et d'activer les "options communes du shell", à l'exception de beep . Plus tard, configurez plus d'options au fur et à mesure que vous les découvrez.

Connexe :que signifie « >/dev/null 2>&1 » dans cet article sur les bases de la crontab ? ?

²À l'époque, la complétion programmable était la fonctionnalité phare de zsh, mais bash l'a acquise peu de temps après.
Les fonctionnalités que bash n'a acquises que dans la version 4 (elles n'étaient donc pas largement disponibles au moment de la publication de cette réponse et ne sont pas disponibles sur le bash fourni par le système sur macOS) sont en plus petits caractères.


Linux
  1. Quelles commandes manquent dans votre fichier bashrc ?

  2. Différence entre " et " sur la ligne de commande (bash) ? ?

  3. Convertir tout le texte des majuscules aux minuscules et vice versa ?

  4. Que signifie -s et [[]] dans une condition If dans Bash ?

  5. Quels avantages verrais-je passer de la version 14.04 à la version 15.04 et quelles sont les mises en garde ? ?

Qu'est-ce qu'Intel SGX et quels en sont les avantages ?

Qu'est-ce qu'un hyperviseur et quels sont ses types

Qu'est-ce que Zsh ? Devriez-vous l'utiliser ?

Qu'est-ce qu'une base de données distribuée et à quoi servent les systèmes de données distribués ?

Qu'est-ce que <() dans bash (et =() dans zsh) ?

Extraire les chemins manquants du tableau bash de chemins