Na prática, #!/usr/bin/env
é portável para quase todos os sistemas que entendem #!
. É um idioma útil para invocar um programa que pode estar em qualquer lugar em $PATH
. Se você codificar o caminho para o intérprete, seu script pode não funcionar se você copiá-lo para uma máquina diferente.
Minha política geral é usar #!/bin/sh
para scripts que usam apenas recursos portáveis de sh
(ou seja, somente recursos POSIX se eu me importo apenas com unices modernos e somente recursos Bourne se eu me preocupo com sistemas mais antigos, como o Solaris antigo lançamentos) e #!/usr/bin/env
caso contrário.
Uma desvantagem de #!/usr/bin/env
é que ela não permite que você passe nenhuma opção ao intérprete. Com alguns intérpretes, isso pode ser contornado especificando as opções como diretivas, ou fazendo com que a segunda linha seja um trecho de linguagem dupla que invoca o intérprete quando executado por sh e não faz nada quando executado pelo intérprete de destino. Há um idioma perl comum , por exemplo (útil para passar -T
).