Existem vários programas que implementam o idioma de /bin/sh
. No Ubuntu, o /bin/sh
dash é projetado para ser rápido, para usar uma pequena quantidade de memória e não suporta muito mais do que o mínimo esperado /bin/sh
. No RHEL, /bin/sh
é o bash, que é mais lento e usa mais memória, mas tem mais recursos. Um desses recursos é o ==
operador para a [
sintaxe condicional. O Dash suporta [
, que é um recurso sh básico, mas não possui o ==
operador que é uma extensão bash (e ksh e zsh).
Você pode mudar seu sistema para o bash. No Ubuntu, /bin/sh
é um link simbólico para dash
. Você pode transformá-lo em um link simbólico bash
. As versões atuais do Debian e Ubuntu (e derivados) fazem desta uma opção de instalação do dash. Para mudar, execute
sudo dpkg-reconfigure dash
e responda "yes" para manter o traço como /bin/sh
ou "no" para mudar para o bash.
Você pode manter o bash como /bin/sh
, mas isso tornará seu sistema um pouco mais lento. É até concebível que algum script do sistema seja incompatível com o bash, embora isso seja improvável, pois o bash é principalmente um superconjunto de traços.
Para distribuições que não têm uma interface para escolher entre implementações de /bin/sh
, veja como mudar para o bash.
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
Mantenha um terminal aberto e verifique se você ainda pode executar alguns sh
scripts depois disso. Se você errar esse comando, o sistema ficará inutilizável. (A propósito, o motivo pelo qual usei os vários comandos acima, e não o direto, sudo ln -sf bash /bin/sh
é que ln -sf
não é atômico. No caso reconhecidamente improvável de o seu computador travar durante esta operação, você precisa inicializar a partir da mídia de resgate para restaurá-lo. Em contraste, mv
é atômico.)
Para restaurar o traço como /bin/sh
:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
Observe que se sh estiver /bin/bash
por padrão em sua distribuição, a mudança para o dash pode causar falha nos scripts, porque o bash possui muito mais recursos que o dash. Os scripts bash devem começar #!/bin/bash
e os scripts iniciados com #!/bin/sh
não devem usar recursos específicos do bash, mas as distribuições que acompanham o bash /bin/sh
podem usar recursos específicos do bash em #!/bin/sh
scripts específicos para essa distribuição (tudo bem, desde que não haja expectativa de que os usuários pode mudar para o dash como /bin/sh
e não há expectativas de que esses scripts funcionem em outra distribuição).
==
que deveria ser=
. Isso e que as expansões variáveis devem ser citadas duas vezes.