J’ai récemment mis à jour vers Ubuntu 13.04 et l’un de mes scripts shell a rompu avec ceci:
#!/bin/sh ... if [ "$SHOW_USAGE" == "true" ]; then ./install.sh: 248: [: false: unexpected operator
Maintenant, je comprends que je peux résoudre ce problème en remplaçant le double-égal (‘==’) par un seul égal (‘=’). Et existe-t-il un moyen de restaurer l’interprétation plus flexible des versions précédentes?
/bin/sh
(et non /bin.sh
comme écrit dans votre article) était lié à /bin/bash
, mais est maintenant lié à /bin/dash
sur Ubuntu. bash tolère certains bassismes même quand on les appelle sh.
Si cela ne vous dérange pas d’exiger bash
pour exécuter votre script, vous pouvez utiliser bash [[
au lieu d’essayer d’utiliser [
. Il y a un comportement différent, mais [[
supporte l’opérateur ==
, alors que [
n’a jamais (sauf peut-être comme extension sur des systèmes particuliers).
Edit: Puisque vous utilisez sh
, le ==
n’a jamais été correct; vous aviez juste de la chance avec une caractéristique particulière de la configuration de votre système.