Tengo un archivo en $ HOME / bin (antes de preguntar, sí, está en mi ruta) llamado test
que 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 test
en 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 test
aú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 usarstrace
para 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:
test
es 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).test
también está integrado, por ejemplo, en Bash, por lo que la ejecucióntest
nunca busca tu binario desde la ruta.test
sin argumentos solo devuelve 1 (falso).La ejecución
strace test
no involucra al shell incorporado, yastrace
que no implementa ninguna utilidad en sí misma. Simplemente usa lo que encuentra en tuPATH
. Tenga en cuenta que probablemente tenga el estándartest
en/bin/test
o/usr/bin/test
, por lo que si eso fuera el primeroPATH
,strace
ejecutaría ejecutar eso.En mi Bash,
which
también es un comando externo, por lo que tampoco tiene una idea sobre las incorporaciones. Por otro lado, eltype
comando está integrado en el shell ytype test
lo mostraríatest is a shell builtin
.Ver también: ¿Por qué no usar "which"? ¿Qué usar entonces?
fuente