Qual é a diferença nesses dois ambientes bash?

6

Eu percebo que com scripts bash , algumas pessoas usam um shebang para o que eu estou acostumado a colocar no topo do meu próprio país.

Alguém pode simplificar a diferença entre esses dois? Eu uso o #!/bin/bash um o tempo todo.

#!/bin/bash
#!/usr/bin/env bash
    
por Danijel-James W 05.10.2013 / 04:21

1 resposta

11

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.

    
por 05.10.2013 / 04:31