Você pode obter a semântica de PATH
-searching usando env
, então:
#!/usr/bin/env ruby
tem a semântica que você gostaria de
#!ruby
A razão que depende de PATH
não ser considerada boa prática é que o script não pode fazer suposições sobre o conteúdo da variável de ambiente PATH, quebrando o "modelo de dependência sequencial" de binários onde
-
/bin
contém os executáveis necessários no momento da inicialização;
-
/usr/bin
contém os outros executáveis usados pela instalação do SO;
-
/usr/local/bin
contém executáveis instalados pelo administrador do sistema que não fazem parte do SO base.
-
~/bin
contém os próprios executáveis do usuário.
Cada nível não deve assumir a existência de binários mais tarde na sequência, que são mais "aplicativos", mas podem depender de binários anteriores, que são mais "fundamentados". E a variável PATH tende a correr de applicationy para fundamental, que é a direção oposta à dependência natural acima.
Para ilustrar o problema, pergunte a si mesmo o que acontece se um script em ~/bin
chamar um script em /usr/local/bin
que invoque o Ruby? Esse script deve depender da versão instalada do SO em /usr/bin/ruby
ou da cópia pessoal que o usuário tem em ~/bin/ruby
? PATH
search fornece a semântica imprevisível associada a esta última (talvez ~/bin/ruby
seja um link simbólico quebrado), enquanto assa o caminho para #!
fornece o primeiro.
Não há realmente nenhum outro sistema operacional "independente de plataforma ... informações sobre o caminho para um comando registrado", então o mais simples é insistir no caminho que está sendo fornecido no #!
.