Tengo un archivo en $ HOME / bin (antes de preguntar, sí, está en mi ruta) llamado testque he confirmado que se puede ejecutar bien cuando lo ejecuto con la ruta completa al archivo. Sin embargo, tengo un problema realmente extraño cuando no lo ejecuto de esta manera. Cuando acabo de ejecutar testen la terminal, no hace nada y regresa de inmediato. Sé que no se trata de encontrar el archivo por varias razones:
No hay ningún mensaje de error. Normalmente, si el archivo no se puede encontrar o no se puede ejecutar, se imprimirá un mensaje diciéndolo.
La ejecución
which testaún devuelve la ruta de archivo correcta.Probablemente el más extraño de todos: el script funciona bien cuando se ejecuta
strace. Traté de usarstracepara ver si podía descubrir qué estaba pasando, pero cuando lo ejecutéstrace, funcionó como se esperaba con 0 problemas.
fuente

type, nowhich. Ver ¿Por qué no usar "which"? ¿Qué usar entonces?Respuestas:
testes un nombre desafortunado para usar, es la utilidad estándar para pruebas condicionales . (En realidad, es el mismo comando que[inif [ ... ], solo parece una cosa sintáctica, pero en realidad es solo un comando normal).testtambién está integrado, por ejemplo, en Bash, por lo que la ejecucióntestnunca busca tu binario desde la ruta.testsin argumentos solo devuelve 1 (falso).La ejecución
strace testno involucra al shell incorporado, yastraceque no implementa ninguna utilidad en sí misma. Simplemente usa lo que encuentra en tuPATH. Tenga en cuenta que probablemente tenga el estándartesten/bin/testo/usr/bin/test, por lo que si eso fuera el primeroPATH,straceejecutaría ejecutar eso.En mi Bash,
whichtambién es un comando externo, por lo que tampoco tiene una idea sobre las incorporaciones. Por otro lado, eltypecomando está integrado en el shell ytype testlo mostraríatest is a shell builtin.Ver también: ¿Por qué no usar "which"? ¿Qué usar entonces?
fuente