Quando é melhor usar #! / Bin / bash Em vez de #! / Bin / sh em um script de shell?
Quando você está criando um novo shell script, você quer ter certeza de que ele é o mais livre de problemas possível, mas às vezes pode ser um pouco confuso saber qual shebang é o melhor para você usar. Na mesma nota, o post de perguntas e respostas do SuperUser de hoje tem a resposta para a pergunta de um leitor confuso.
A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..
A questão
Leitor SuperUser Hendre quer saber quando é melhor usar #! / bin / bash ao invés de #! / bin / sh em scripts de shell:
Quando é mais apropriado usar #! / bin / bash ao invés de #! / bin / sh em um script de shell?
Quando é melhor usar #! / bin / bash ao invés de #! / bin / sh em um script de shell?
A resposta
O contribuidor do SuperUser, Grawity, tem a resposta para nós:
Em resumo:
- Existem vários shells que implementam um superconjunto da especificação sh POSIX. Em diferentes sistemas, / bin / sh pode ser um link para ash, bash, dash, ksh, zsh, etc. Ele sempre será compatível com sh, nunca csh ou fish.
- Contanto que você fique apenas com 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á invoca o bash no seu sistema, ele pode não estar no sistema de todos os outros, 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 pelo traço mínimo. Scripts que usavam bashisms mas tinham #! / bin / sh de repente quebrou.
Contudo:
- Até #! / bin / bash não é tão correto. Em sistemas diferentes, o bash pode viver 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 não seja estritamente garantida,, / usr / bin / env ainda funciona em mais sistemas do que / bin / bash faz.
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.
Crédito de imagem: Wikipedia