Il existe plusieurs programmes qui implémentent le langage de /bin/sh
. Sur Ubuntu, /bin/sh
est dash, qui est conçu pour être rapide, pour utiliser une petite quantité de mémoire, et ne prend pas en charge beaucoup plus que le minimum attendu de /bin/sh
. Sur RHEL, /bin/sh
est bash, qui est plus lent et utilise plus de mémoire mais a plus de fonctionnalités. L'une de ces fonctionnalités est l' ==
opérateur de la [
syntaxe conditionnelle. Dash prend en charge [
, qui est une fonctionnalité sh de base, mais il n'a pas l' ==
opérateur qui est une extension bash (et ksh et zsh).
Vous pouvez passer votre système en utilisant bash. Sur Ubuntu, /bin/sh
est un lien symbolique vers dash
. Vous pouvez en faire un lien symbolique à la bash
place. Les versions actuelles de Debian et Ubuntu (et dérivés) en font une option d'installation de dash. Pour le changer, exécutez
sudo dpkg-reconfigure dash
et répondez «oui» pour conserver le tiret comme /bin/sh
ou «non» pour passer à bash.
Vous pouvez garder bash as /bin/sh
, mais cela rendra votre système un peu plus lent. Il est même concevable que certains scripts système soient incompatibles avec bash, bien que cela soit peu probable car bash est principalement un surensemble de tirets.
Pour les distributions qui n'ont pas d'interface pour choisir entre les implémentations de /bin/sh
, voici comment passer à bash.
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
Gardez un terminal ouvert et vérifiez que vous pouvez toujours exécuter certains sh
scripts après cela. Si vous gâchez cette commande, cela rendra votre système inutilisable. (Soit dit en passant, la raison pour laquelle j'ai utilisé les multiples commandes ci-dessus plutôt que l'aspect simple sudo ln -sf bash /bin/sh
est qu'il ln -sf
n'est pas atomique. Dans le cas, il est peu probable, que votre ordinateur s'est écrasé pendant cette opération, vous devez démarrer à partir d'un support de secours pour le restaurer. En revanche, mv
est atomique.)
Pour restaurer le tableau de bord en tant que /bin/sh
:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
Notez que si sh est /bin/bash
par défaut sur votre distribution, le passage à dash peut entraîner l'échec des scripts, car bash a beaucoup plus de fonctionnalités que dash. Les scripts Bash doivent commencer par #!/bin/bash
, et les scripts commençant par #!/bin/sh
ne doivent pas utiliser de fonctionnalités spécifiques à bash, mais les distributions livrées avec bash /bin/sh
peuvent utiliser des fonctionnalités spécifiques à bash dans des #!/bin/sh
scripts spécifiques à cette distribution (c'est correct tant qu'il n'y a aucune attente que les utilisateurs peut passer au tiret au fur /bin/sh
et à mesure et il n'y a aucune attente que ces scripts fonctionnent sur une autre distribution).
==
qui devrait être=
. Cela, et que les extensions de variable doivent être entre guillemets.