Percebo que com bash
scripts, algumas pessoas usam uma forma diferente
Shebangàquele que estou acostumado a colocar no topo do meu.
Alguém pode simplificar a diferença entre esses dois? Eu uso #!/bin/bash
esse o tempo todo.
#!/bin/bash
#!/usr/bin/env bash
Responder1
Os #!/usr/bin/env bash
resultados 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 é (diferentes sistemas operacionais). Outro uso 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 tira vantagem de um comportamento do env
utilitário.
O env
utilitário é 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 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 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 coisas que o script está tentando fazer.
A desvantagem é que você pode obter um comportamento imprevisível. Como você está à mercê do usuário $PATH
, isso pode fazer com que o script seja executado com uma versão do bash que tenha um comportamento diferente do esperado pelo script.