Eu tenho um arquivo em $ HOME / bin (antes que você pergunte, sim, ele está no meu caminho) chamado test
que eu confirmei que pode ser executado corretamente quando eu o executo com o caminho completo para o arquivo. No entanto, recebo um problema muito estranho quando não o faço dessa maneira. Quando eu apenas corro test
no terminal, ele não faz nada e retorna imediatamente. Sei que não se trata de encontrar o arquivo por vários motivos:
Não há nenhuma mensagem de erro. Normalmente, se o arquivo não puder ser encontrado ou não puder ser executado, uma mensagem será impressa dizendo isso.
A execução
which test
ainda retorna o caminho correto do arquivo.Provavelmente o mais estranho de todos - o script funciona bem quando executado
strace
. Tentei usarstrace
para ver se conseguia descobrir o que estava acontecendo, mas quando o executeistrace
, funcionou como esperado com 0 problemas.
fonte
type
, nãowhich
. Consulte Por que não usar "qual"? O que usar então?Respostas:
test
é um nome infeliz para usar, é o utilitário padrão para testes condicionais . (Na verdade, é o mesmo comando que o[
inif [ ... ]
, apenas parece uma coisa sintática, mas é realmente apenas um comando normal.)test
também está embutido, por exemplo, no Bash, portanto, executar apenastest
nunca pesquisa seu binário no caminho.test
sem argumentos retorna apenas 1 (falso).A execução
strace test
não envolve o shell incorporado, poisstrace
não implementa nenhum utilitário. Ele apenas usa o que encontra no seuPATH
. Note que você provavelmente tem o padrãotest
em/bin/test
ou/usr/bin/test
, então, se isso seria pela primeira vez emPATH
,strace
iria correr executar isso.No meu Bash,
which
também é um comando externo, portanto também não tem uma idéia sobre os componentes internos. Por outro lado, otype
comando está embutido no shell etype test
mostraria issotest is a shell builtin
.Veja também: Por que não usar "what"? O que usar então?
fonte