J'ai un fichier dans $ HOME / bin (avant de demander, oui, il se trouve dans mon chemin) appelé test
et j'ai confirmé qu'il peut être exécuté correctement lorsque je l'exécute avec le chemin d'accès complet au fichier. Cependant, j'ai un problème vraiment bizarre quand je ne le fais pas de cette façon. Quand je viens de courir test
dans le terminal, il ne fait rien et revient immédiatement. Je sais que ce n'est pas un problème de trouver le fichier pour plusieurs raisons:
Il n'y a aucun message d'erreur. Normalement, si le fichier est introuvable ou ne peut pas être exécuté, un message sera imprimé pour le dire.
L'exécution
which test
renvoie toujours le chemin de fichier correct.Probablement le plus étrange de tous - le script fonctionne bien lorsqu'il est exécuté
strace
. J'ai essayé d'utiliserstrace
pour voir si je pouvais comprendre ce qui se passait, mais lorsque je l'ai exécutéstrace
, cela a fonctionné comme prévu avec 0 problème.
la source
type
paswhich
. Voir Pourquoi ne pas utiliser «lequel»? Que faut-il utiliser alors?Réponses:
test
est un nom malheureux à utiliser, c'est l' utilitaire standard pour les tests conditionnels . (C'est en fait la même commande que le[
inif [ ... ]
, cela ressemble à une chose syntaxique, mais c'est vraiment juste une commande normale.)test
est également intégré à Bash par exemple, donc l'exécutiontest
ne recherche jamais votre binaire depuis le chemin.test
sans argument renvoie simplement 1 (faux).L'exécution
strace test
n'implique pas le shell intégré, car n'implémentestrace
aucun utilitaire lui-même. Il utilise simplement ce qu'il trouve dans votrePATH
. Notez que vous avez probablement la normetest
dans/bin/test
ou/usr/bin/test
, si cela devait être le premierPATH
,strace
exécutez-la.Sur mon Bash, il
which
y a aussi une commande externe, donc il n'a pas non plus d'idée sur les builtins. D'un autre côté, latype
commande est intégrée au shell ettype test
le montreraittest is a shell builtin
.Voir aussi: Pourquoi ne pas utiliser "qui"? Que faut-il utiliser alors?
la source