Existe algum 'Bash' objectivamente melhor do que os outros para a maioria das utilizações?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
Lembro-me vagamente de há muito tempo atrás ouvir dizer que adicionar um traço ao final impede que alguém passe um comando ao seu script, mas não consigo encontrar nenhum detalhe sobre isso.
Você deve utilizar #!/usr/bin/env bash
** para portabilidade: diferentes \nixes colocam bash
em lugares diferentes, e utilizar `/usr/bin/env
é uma alternativa para executar o primeiro bash
encontrado no PATH
. E shnão é
bash`**.
O /bin/sh
é normalmente um link para a shell padrão do sistema, que muitas vezes é bash
mas, por exemplo, nos sistemas Debian o dash' é mais leve. De qualquer forma, a shell Bourne original é
sh, então se o seu script utiliza algumas características específicas
bash(2nd generation, "Bourne Again sh") (
[[ ]]`teste, arrays, várias coisas açucaradas, etc.), então você deve ser mais específico e utilizar o mais recente. Desta forma, em sistemas onde o bash não está instalado, o seu script não será executado. Eu entendo que pode haver uma trilogia emocionante de filmes sobre esta evolução...mas isso pode ser um boato.
Note também que quando evocado como sh
, bash
até certo ponto comporta-se como padrão POSIX sh
(veja também os documentos do GNU sobre isso).
Depende realmente de como você escreve seus scripts de bash. Se o seu /bin/sh
está ligado simbolicamente ao bash, quando o bash é invocado como sh
, algumas funcionalidades não estão disponíveis.
Se você quer recursos específicos de bash, não-POSIX, utilize #!/bin/bash
.