30Jul

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

Quando você está criando um novo script de shell, você quer se certificar de que é tão livre de problemas quanto possível, mas às vezes pode ser um pouco confuso saber qual shebang é o melhor para você usar. Nessa nota, o artigo SuperUser Q & A tem uma resposta para a pergunta do leitor confuso.

Pergunta de hoje e amp;A sessão de atendimento chega a cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento comunitário de sites Q & A.

O questionário

SuperUser 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 O

SuperUser contribuinte grawity tem a resposta para nós:

Em resumo:

  • Existem vários shells que implementam um superconjunto da especificação POSIX sh. Em diferentes sistemas, /bin/ sh pode ser um link para cinzas, bash, dash, ksh, zsh, etc. Sempre será compatível com sh, nunca csh ou peixe.
  • Enquanto você ficar com os recursos sh somente, você pode( e provavelmente mesmo deve) usar #!/bin/ sh eo script deve funcionar bem, não importa qual shell é.
  • Se você começar a usar os recursos específicos do bash( ou seja, arrays), você deve solicitar especificamente bash porque, mesmo que /bin/ sh já invoque bash no seu sistema, pode não estar no sistema de todos e seu script não será executado. O mesmo se aplica a zsh e ksh, é claro.
  • Mesmo que o script seja para uso pessoal, você pode notar que alguns sistemas operacionais alteram /bin/ sh durante as atualizações. Por exemplo, no Debian costumava ser bash, mas foi posteriormente substituído pelo traço muito mínimo. Scripts que usavam bashismos, mas tinham #!/bin/ sh de repente quebrou.

No entanto:

  • Mesmo #!/bin/ bash não está correto. Em sistemas diferentes, 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 própria ferramenta env não seja estritamente garantida, /usr/bin/ env ainda funciona em mais sistemas do que /bin/ bash .

Tem alguma coisa a adicionar à explicação? Som desligado nos comentários. Deseja ler mais respostas de outros usuários Tech-savvy Stack Exchange? Confira o tópico de discussão completo aqui.

Crédito da imagem: Wikipedia