Pagina inicial » como » Quando é melhor 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?

    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