Ich habe eine Datei in $ HOME / bin (bevor Sie fragen, ja, sie befindet sich in meinem Pfad) aufgerufen, test
die ich bestätigt habe und die einwandfrei ausgeführt werden kann, wenn ich sie mit dem vollständigen Pfad zur Datei ausführe. Ich bekomme jedoch ein wirklich seltsames Problem, wenn ich es nicht so laufen lasse. Wenn ich gerade test
im Terminal starte, macht es nichts und kehrt sofort zurück. Ich weiß, dass es aus mehreren Gründen nicht darum geht, die Datei zu finden:
Es liegt keine Fehlermeldung vor. Wenn die Datei nicht gefunden oder nicht ausgeführt werden kann, wird normalerweise eine entsprechende Meldung ausgedruckt.
Das Ausführen gibt
which test
weiterhin den richtigen Dateipfad zurück.Wahrscheinlich das seltsamste von allen - das Skript funktioniert einwandfrei, wenn es durchlaufen wird
strace
. Ich habe versucht mitstrace
zu sehen, ob ich herausfinden kann, was los ist, aber als ich es ausgeführt habestrace
, hat es bei 0 Problemen wie erwartet funktioniert.
quelle
type
nichtwhich
. Siehe Warum nicht "welche" verwenden? Was ist dann zu verwenden?Antworten:
test
ist ein unglücklicher Name, der als Standarddienstprogramm für bedingte Tests verwendet wird . (Es ist eigentlich der gleiche Befehl wie der[
inif [ ... ]
, es sieht nur wie eine syntaktische Sache aus, ist aber wirklich nur ein normaler Befehl.)test
ist auch in zB Bash integriert, so dass beim Laufentest
niemals die Binärdatei vom Pfad abgefragt wird.test
Ohne Argumente wird nur 1 (false) zurückgegeben.Das Ausführen
strace test
beinhaltet nicht die eingebaute Shell, dastrace
keine Dienstprogramme selbst implementiert werden. Es verwendet nur das, was es in Ihrem findetPATH
. Beachten Sie, dass Sie wahrscheinlich den Standard habentest
in/bin/test
oder/usr/bin/test
, also wenn das erste in sein würdePATH
,strace
dass laufen würde laufen.In meinem Bash
which
ist es auch ein externer Befehl, daher hat es auch keine Ahnung von eingebauten Funktionen. Andererseits ist dertype
Befehl in die Shell integriert undtype test
würde dies zeigentest is a shell builtin
.Siehe auch: Warum nicht "welches" verwenden? Was ist dann zu verwenden?
quelle