Qual é a diferença nesses dois ambientes bash?

Qual é a diferença nesses dois ambientes bash?

Percebo que com bashscripts, 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/bashesse o tempo todo.

#!/bin/bash
#!/usr/bin/env bash

Responder1

Os #!/usr/bin/env bashresultados 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 bashapenas tira vantagem de um comportamento do envutilitário.
O envutilitário é normalmente usado para manipular o ambiente ao chamar um programa (por exemplo; env -i someprogpara 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/bashfor 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.

informação relacionada