Em vez de usar which , que não trabalhe quando precisar mais , use type para determinar o que será executado quando você digitar um comando:
$ which set
./set
$ type set
set is a shell builtin
O shell sempre procura por buildins antes de pesquisar o $PATH , então definir $PATH não ajuda aqui.
Seria melhor renomear seu executável para outra coisa, mas se sua atribuição exigir que o programa seja nomeado set , você poderá usar uma função de shell:
$ function set { ./set; }
$ type set
set is a function
set ()
{
./set
}
(Isso funciona em bash , mas outros shells como ksh podem não permitir. Veja a resposta do mikeserv para uma solução mais portátil.)
Agora, digitar set executará a função chamada "set", que executa ./set . O GNU bash procura por funções antes de procurar por builtins, e procura por builtins antes de pesquisar o $PATH . A seção chamada "COMMAND EXECUTION" na página man bash fornece mais informações sobre isso.
Veja também a documentação sobre builtin e command : help builtin e help command .