Gibt es eine POSIX-Funktion, die PATH
für eine ausführbare Datei gemäß der Beschreibung der POSIX-Spezifikation durchsucht der Umgebungsvariable PATH
und gibt den absoluten Pfad zur ausführbaren Datei zurück?
Wenn nicht, gibt es eine einfache, sichere, standardmäßige und zuverlässige Möglichkeit, PATH
zu durchsuchen?
Bearbeiten:
Die Funktion execvpe()
von glibc macht ihre eigene PATH
suche, also vermute ich, dass es keine spezifische PATH
Suchfunktion gibt, die vom Standard definiert wird.
Edit 2: Ich möchte den Code von jemand anderem nicht kopieren oder die PATH
Suche selbst aus ein paar Gründen implementieren:
PATH
nicht gesetzt oder auf null gesetzt ist, ist die Pfadsuche implementierungsdefiniert." Ich möchte, dass das Verhalten in diesen Fällen mit dem übereinstimmt, was auch immer das System tut, aber ich kann das nicht, wenn es keine Standardfunktion gibt, die ich aufrufen kann. Gibt es eine POSIX-Funktion, die PATH nach der Beschreibung der PATH-Umgebungsvariablen in der POSIX-Spezifikation durchsucht und den absoluten Pfad zur ausführbaren Datei zurückgibt?
Nein.
Wenn nicht, gibt es einen einfachen, sicheren, standardmäßigen und zuverlässigen Weg, PATH zu suchen?
Ja und nein. Ja, es gibt einen Standard für das Format PATH
, aus dem die Korrektheit / Zuverlässigkeit der Implementierungen folgt.
Nein, es gibt keine Standardfunktion, die dies tut. Kopieren von Code ist Ihre beste Wette.
Wenn
PATH
nicht gesetzt oder auf null gesetzt ist, ist die Pfadsuche implementierungsdefiniert.
Das heißt, Sie können nicht portable replizieren, was execvp
macht, aber die Suche nach /bin:/usr/bin
ist eine ziemlich sichere Wette. Alternativ kann in diesem Fall nur ein Fehler ausgelöst werden.
(Ich gebe zu, es wäre schön gewesen, wenn POSIX diese Funktion gehabt hätte, aber es ist einfach nicht da.)
Wie wäre es mit etwas wie:
? %Vor% und dann seine Ausgabe lesen? Dies würde zu einem Verhalten führen, das der Behandlung von leerem / nicht gesetztem PATH
des Systems entspricht, und es ist möglicherweise einfacher als die manuelle Suche nach PATH
.
Dieser Ansatz hat einige Nachteile:
somecommand
vom Benutzer stammt, muss es möglicherweise bereinigt werden, um Code-Injection-Angriffe zu verhindern. Das würde zur Komplexität beitragen. somecommand
eine spezielle integrierte Shell ist (z. B. set
), werden falsche Ergebnisse zurückgegeben. Dieser Fall sollte erkennbar sein, aber was dann? Mehr Komplexität.