Quando é melhor usar #! / Bin / bash em vez de #! / Bin / sh em um Shell Script?

quando-é-melhor-usar-bin-bash-em vez de-bin-sh-em-um-shell-script-00

Ao criar um novo script de shell, você quer ter certeza de que ele está livre de problemas o máximo possível, mas às vezes pode ser um pouco confuso saber qual é o melhor para você usar. Por falar nisso, a postagem de hoje de perguntas e respostas do superusuário tem a resposta para a pergunta de um leitor confuso.

A sessão de perguntas e respostas de hoje chega até nós como cortesia do SuperUser – uma subdivisão do Stack Exchange, um grupo de sites de perguntas e respostas voltado para a comunidade.

A questão

O leitor de superusuário Hendre quer saber quando é melhor usar #! / Bin / bash em vez de #! / Bin / sh em scripts de shell:

Quando é mais apropriado usar #! / Bin / bash em vez de #! / Bin / sh em um script de shell?

Quando é melhor usar #! / Bin / bash em vez de #! / Bin / sh em um script de shell?

A resposta

Grawity, contribuidor do SuperUser, tem a resposta para nós:

Em resumo:

  • Existem vários shells que implementam um superconjunto da especificação POSIX sh . Em sistemas diferentes, / bin / sh pode ser um link para ash, bash, dash, ksh, zsh, etc. Porém, sempre será compatível com sh, nunca com csh ou fish.
  • Contanto que você se atenha apenas aos recursos sh, você pode (e provavelmente deve) usar #! / Bin / sh e o script deve funcionar bem, não importa qual shell seja.
  • Se você começar a usar recursos específicos do bash (ou seja, arrays), você deve solicitar especificamente o bash porque, mesmo se / bin / sh já invocar o bash em seu sistema, ele pode não estar no sistema de todos e seu script não será executado lá. O mesmo se aplica a zsh e ksh, é claro.
  • Mesmo que o script seja apenas para uso pessoal, você pode notar que alguns sistemas operacionais mudam / bin / sh durante as atualizações. Por exemplo, no Debian costumava ser bash, mas mais tarde foi substituído por um traço mínimo. Scripts que usavam bashisms mas tinham #! / Bin / sh quebrou repentinamente.

Contudo:

  • Mesmo #! / Bin / bash não é correto. Em sistemas diferentes, o bash pode residir em / usr / bin , / usr / pkg / bin ou / usr / local / bin .
  • Uma opção mais confiável é #! / Usr / bin / env bash , que usa $ PATH . Embora a ferramenta env em si também não seja estritamente garantida, / usr / bin / env ainda funciona em mais sistemas do que / bin / bash .

Tem algo a acrescentar à explicação? Som desligado nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui .

Recomendado:  O que é um jogo “Pay-to-Win”?

Crédito da imagem: Wikipedia