Comment changer votre shell par défaut sur Linux avec chsh



Bash n’est pas l’unique interpréteur de commandes disponible sous Linux. Il est simple d’expérimenter avec d’autres options, comme Zsh, qui jouit d’une grande popularité. Une fois que vous avez trouvé un interpréteur qui vous convient, la commande `chsh` vous permet de le définir comme interpréteur par défaut. Nous allons vous expliquer comment procéder.

L’importance d’un interpréteur de commandes

L’interpréteur de commandes se situe entre vous et le système d’exploitation. Il offre un environnement dans une fenêtre de terminal où vous pouvez saisir des commandes et exécuter des programmes. L’interpréteur analyse vos saisies et détermine vos intentions. S’il peut exécuter lui-même vos requêtes, il le fait. Dans le cas contraire, il recherche les programmes nécessaires pour réaliser vos demandes.

De nombreux interpréteurs de commandes sont disponibles sous Linux. Ils permettent tous de réaliser les mêmes tâches fondamentales : explorer le système de fichiers, manipuler des fichiers, lancer des programmes et exécuter des scripts. Cependant, chacun réalise ces opérations à sa manière, avec ses propres caractéristiques et particularités.

Les interpréteurs sont généralement conçus par des personnes ayant une vision précise de la façon dont les choses devraient fonctionner. Si votre propre vision correspond à celle du concepteur, cet interpréteur pourrait bien vous convenir. De plus, il est aisé de tester un nouvel interpréteur sous Linux.

Dans la plupart des distributions Linux, y compris Ubuntu, l’interpréteur par défaut est bash. Il fonctionne très bien et offre de nombreuses possibilités. Cependant, un autre interpréteur pourrait vous faire gagner du temps de manière significative et améliorer votre flux de travail. La seule façon de le savoir, c’est de l’essayer!

Diversité des interpréteurs de commandes

Nous avons déjà abordé les différents interpréteurs Linux, mais voici un bref aperçu des plus courants :

  • bash : Le shell Bourne est encore une fois l’option par défaut dans de nombreuses distributions.
  • rbash : Ce shell bash limité offre des fonctionnalités réduites à l’utilisateur ou au script qui l’utilise.
  • ash : Le shell Almquist est une version allégée de bash.
  • dash : Le shell Debian Almquist est le shell de script par défaut dans Ubuntu. Alors que bash est l’interpréteur de connexion et interactif par défaut, dash est utilisé pour exécuter les processus système car il est beaucoup plus léger que bash.
  • zsh : Le shell Z est une version moderne de la famille des shells bash. Il propose des améliorations intéressantes, comme la vérification orthographique des commandes et des suggestions de corrections.
  • fish : Cet interpréteur interactif convivial a été écrit de zéro et n’est dérivé d’aucune autre famille de shell. Il est conçu pour être facile à utiliser. Parmi ses nombreuses fonctionnalités, Fish propose des suggestions de commandes basées sur votre historique et le contenu du dossier actuel, à l’instar du texte prédictif.
  • ksh : Le KornShell offre un langage de script particulièrement puissant.

Vérification des interpréteurs installés

Pour voir quels interpréteurs sont installés sur votre système, utilisez la commande suivante. Elle affichera simplement le contenu du fichier `/etc/shells`:

cat /etc/shells

Nous avons mentionné bash, dash et rbash, mais qu’en est-il de `sh` ?

`sh` est le shell Thompson, créé en 1971 par Ken Thompson des Bell Labs. Il n’est plus maintenu et a été remplacé depuis longtemps par des interpréteurs modernes. Il est inclus pour assurer la compatibilité avec les anciens scripts qui ont toujours cette ligne comme première ligne :

#!/bin/sh

Ceci indique au système d’utiliser le shell `sh` pour exécuter le script. Est-ce que cet ancien shell est réellement présent sur votre machine et est-il utilisé pour exécuter vos scripts ? La commande `which` nous indiquera quel programme est réellement exécuté lorsque vous tapez une commande.

Voyons ce qui est exécuté quand vous tapez `sh`:

which sh

Un fichier binaire est trouvé. En examinant cela plus en détail, nous pouvons voir qu’il s’agit en fait d’un lien symbolique vers `dash`, l’interpréteur léger utilisé pour exécuter les scripts :

ls -l /bin/sh

C’est une manière simple et légère de fournir une sécurité pour les scripts qui s’attendent à trouver `sh` sur les systèmes modernes.

Installation d’un nouvel interpréteur

Installons l’interpréteur `fish` et définissons-le comme interpréteur par défaut pour Dave. Sous Ubuntu, utilisez la commande suivante :

sudo apt-get install fish

Sous Manjaro, utilisez pacman:

sudo pacman -Sy fish

Sur Fedora, tapez ce qui suit:

sudo dnf install fish

Une fois l’installation terminée, vous pouvez vérifier à nouveau les interpréteurs installés:

cat /etc/shells

Notre nouvel interpréteur apparaît comme `/usr/bin/fish`. Prenez note de ce chemin – vous en aurez bientôt besoin.

La variable d’environnement $SHELL

La variable d’environnement `$SHELL` contient le nom de votre interpréteur actuel. Nous pouvons vérifier sa valeur avec la commande `echo` :

echo $SHELL

Démarrons maintenant l’interpréteur `fish` :

fish

Vérifions de nouveau la valeur de la variable `$SHELL` :

echo $SHELL

La première fois que nous utilisons `echo $SHELL`, nous sommes dans le shell bash. La variable d’environnement contient le chemin vers l’exécutable bash, `/bin/bash`.

Lorsque nous lançons l’interpréteur `fish`, nous recevons un message de bienvenue et l’invite de commande change. Il peut être surprenant de constater que la variable d’environnement `$SHELL` contient toujours le chemin vers l’exécutable bash, `/bin/bash`. C’est tout à fait normal.

Quand vous lancez un nouvel interpréteur (ou tout autre programme), il hérite de l’environnement du shell parent. Ainsi, l’interpréteur `fish` hérite des variables d’environnement globales et exportées du shell bash. Comme la valeur de la variable `$SHELL` n’a pas été modifiée, elle conserve la même valeur dans l’interpréteur `fish` que dans le shell bash.

Nous utilisons `fish` comme n’importe quel autre programme. Nous pouvons également utiliser la commande `exit` pour quitter l’interpréteur `fish`. Il se ferme comme n’importe quel autre programme et nous revenons au shell bash.

C’est une excellente façon de tester de nouveaux interpréteurs, de voir ce qu’ils peuvent faire et si vous vous y sentez à l’aise. Vous pouvez explorer avant de vous décider et d’en adopter un comme interpréteur par défaut.

Si vous décidez de faire de `fish` – ou de tout autre interpréteur – votre option par défaut, vous devrez utiliser la commande `chsh`.

La commande chsh

La commande `chsh` vous permet de modifier votre interpréteur par défaut. Il est important de comprendre qu’elle permet de modifier à la fois l’interpréteur de connexion et l’interpréteur interactif par défaut. Vous pouvez choisir de changer l’un ou l’autre, ou les deux.

Chaque fois que vous vous connectez pour obtenir une invite de commande, vous utilisez l’interpréteur configuré comme interpréteur de connexion. Lorsque vous êtes déjà connecté et que vous ouvrez une fenêtre de terminal, vous utilisez l’interpréteur configuré comme interpréteur interactif. Il peut s’agir du même interpréteur ou de deux interpréteurs différents.

Pour définir votre interpréteur de connexion, utilisez `chsh` sans paramètres :

chsh

Vous serez invité à entrer votre mot de passe. Ensuite, vous devrez taper le chemin vers le nouvel interpréteur et appuyer sur Entrée.

Si nous établissons une connexion à distance à ce système de test depuis un autre ordinateur, nous nous retrouverons dans l’interpréteur `fish` une fois connectés.

Pour changer votre interpréteur interactif, utilisez `chsh` avec l’option `-s` (shell). Indiquez le chemin vers le nouvel interpréteur sur la ligne de commande :

chsh -s /usr/bin/fish

Vous serez invité à entrer votre mot de passe et renvoyé à l’invite de commande de votre interpréteur actuel. Vous devrez vous déconnecter puis vous reconnecter pour que les changements soient pris en compte. Après vous être reconnecté, vous verrez le message de bienvenue et l’invite de commande de l’interpréteur `fish`.

La variable d’environnement `$SHELL` contient maintenant le chemin vers votre nouvel interpréteur par défaut :

echo $SHELL

Modification de l’interpréteur d’un autre compte utilisateur

Si vous avez les privilèges root et que vous pouvez utiliser `sudo`, vous pouvez modifier les interpréteurs d’autres comptes utilisateurs. La commande est la même que précédemment, avec l’ajout du nom d’utilisateur de cette personne à la ligne de commande :

sudo chsh -s /usr/bin/fish mary

Lors de la prochaine connexion de Mary, elle verra le nouvel interpréteur lorsqu’elle ouvrira une fenêtre de terminal.

Chaque