Justificativa para a /regra POSIX PATH
A regra foi mencionada em: Por que você precisa de ./ (barra) antes do nome do executável ou do script para executá-lo no bash?mas gostaria de explicar por que acho que esse é um bom design com mais detalhes.
Primeiro, uma versão completa explícita da regra é:
- Se o caminho contém
/(por exemplo ./someprog, /bin/someprog,./bin/someprog ): CWD é utilizado e não é PATH
- se o caminho não contiver
/(por exemplo someprog): PATH é usado e CWD não é
Agora, suponha que executando:
someprog
pesquisaria:
- em relação à CWD primeiro
- em relação ao PATH após
Então, se você queria fugir /bin/someprogda sua distribuição, e fez:
someprog
algumas vezes funcionava, mas outras falhava, porque você pode estar em um diretório que contém outro não relacionado someprog programa .
Portanto, você aprenderia em breve que isso não é confiável e acabaria sempre usando caminhos absolutos quando desejar usar o PATH, derrotando, portanto, o objetivo do PATH.
É também por isso que ter caminhos relativos no PATH é uma péssima ideia. Eu estou olhando para vocênode_modules/bin .
Por outro lado, suponha que executando:
./someprog
Pesquisaria:
- em relação ao PATH primeiro
- em relação à DRC após
Então, se você acabou de baixar um script someprogde um repositório git e quiser executá-lo no CWD, nunca terá certeza de que este é o programa real a ser executado, porque talvez sua distribuição possua:
/bin/someprog
que está no seu PATH de algum pacote que você instalou depois de beber demais depois do Natal do ano passado.
Portanto, mais uma vez, você seria forçado a sempre executar scripts locais relativos ao CWD com caminhos completos para saber o que está executando:
"$(pwd)/someprog"
o que seria extremamente irritante também.
Outra regra que você pode ser tentado a criar seria:
caminhos relativos usam apenas PATH, caminhos absolutos apenas CWD
mas, mais uma vez, isso força os usuários a sempre usar caminhos absolutos para scripts não PATH "$(pwd)/someprog".
A /regra de pesquisa de caminho oferece uma solução simples de lembrar para o problema sobre:
- barra: não use
PATH
- sem barra: use apenas
PATH
o que torna super fácil saber sempre o que você está executando, confiando no fato de que os arquivos no diretório atual podem ser expressos como ./somefileou somefilee, portanto, atribui um significado especial a um deles.
Às vezes, é um pouco chato que você não possa procurar em some/progrelação a PATH, mas não vejo uma solução mais saudável para isso.