Em um sentido, usar env
pode ser considerado "portátil" porque o caminho para bash
não é relevante ( /bin/bash
, /usr/bin/bash
, /usr/local/bin/bash
, ~/bin/bash
ou qualquer caminho) porque é especificado no ambiente. Dessa forma, um autor de script poderia facilitar a execução de seu script em muitos sistemas diferentes.
Em outro sentido, usar env
para localizar bash
ou qualquer outro interpretador de shell ou de comando é considerado um risco de segurança, pois um binário desconhecido (malware) pode ser usado para executar o script. Nestes ambientes, e às vezes pela política gerencial, o caminho é especificado explicitamente com um caminho completo: #!/bin/bash
.
Em geral, use env
, a menos que você saiba que está escrevendo em um desses ambientes que analisa os mínimos detalhes de risco.
Quando o Ubuntu começou a usar dash
, em 2011, muitos scripts foram quebrados por essa ação. Houve discussão sobre isso no askubuntu.com. A maioria dos scripts foi escrita em #!/bin/sh
, que era um link para /bin/bash
. O consenso foi este: o roteirista é responsável por especificar o intérprete. Portanto, se seu script sempre deve ser chamado com BASH, especifique-o no ambiente. Isso evita que você tenha que adivinhar o caminho, o que é diferente em vários sistemas Unix / Linux. Além disso, funcionará se amanhã /bin/sh
se tornar um link para algum outro shell como /bin/newsh
.
Outra diferença é que o método env
não permite a passagem de argumentos para o interpretador.