O #!/usr/bin/env bash
resulta no script usando qualquer bash encontrado primeiro em $PATH
.
Embora seja comum que o bash esteja localizado em /bin/bash
. Há casos em que não é (sistemas operacionais diferentes). Outro uso em potencial é quando há vários shells bash instalados (versão mais recente em um local alternativo como /usr/local/bin/bash
).
Fazer #!/usr/bin/env bash
apenas aproveita o comportamento do utilitário env
.
O utilitário env
é normalmente usado para manipular o ambiente ao chamar um programa (por exemplo, env -i someprog
para limpar o ambiente). No entanto, ao não fornecer nenhum outro argumento além do programa a ser executado, resulta na execução do programa especificado, conforme encontrado em $PATH
.
Observe que há vantagens e desvantagens em fazer isso.
As vantagens são as mencionadas anteriormente, pois torna o script portátil se o bash estiver instalado em um local diferente ou se /bin/bash
for muito antigo para suportar as coisas que o script está tentando fazer.
A desvantagem é que você pode obter um comportamento imprevisível. Como você está à mercê do $PATH
do usuário, isso pode fazer com que o script seja executado com uma versão do bash que tenha um comportamento diferente do que o script espera.