Garantiert POSIX, dass sich die Standarddienstprogramme in PATH befinden?


11

Im Abschnitt "Befehlssuche und -ausführung" wird in der POSIX-Spezifikation angegeben, dass PATHgesucht wird, wenn ein Dienstprogramm zum Ausführen gefunden wird (mit einigen Ausnahmen). Erwähnt die Spezifikation irgendwo, wo PATHauf einen Wert initialisiert wird, der garantiert, dass alle Standarddienstprogramme gefunden werden?

Oder muss ich Folgendes tun, um sicherzustellen, dass beim Ausführen eines Standarddienstprogramms niemals der Fehler "Befehl nicht gefunden" angezeigt wird?

PATH=$(command -p sh -c 'printf %s "${PATH}"')

(Siehe die POSIX-Spezifikation des commandDienstprogramms. )

Antworten:


13

Ja und nein. In einer POSIX-Umgebung müssen sich die Dienstprogramme wie in der Spezifikation beschrieben verhalten. In der Praxis bedeutet dies, dass konforme Versionen der Dienstprogramme in vorhanden sein müssen $PATH. Wenn Sie Ihr Programm jedoch auf einem POSIX-kompatiblen System ausführen, führen Sie es möglicherweise in einer nicht konformen Umgebung aus. In der Praxis kommt es häufig vor, dass das Betriebssystem über einen Legacy-Modus und einen POSIX-Modus verfügt und sich standardmäßig im Legacy-Modus befindet. Schlimmer als das Fehlen einiger Befehle, weist der Legacy-Modus häufig Inkompatibilitäten auf, z. B. Optionen mit unterschiedlichen Bedeutungen.

Sie können ein Gut PATHmit abrufen getconf. Natürlich ist es schwierig, da getconfim Original $PATHmöglicherweise nicht das richtige ist. Der Befehl Application Usage for zeigt eine Möglichkeit, dies zu tun:

command -p getconf PATH

Soweit ich die Spezifikation verstehe, ist dies nicht erforderlich, wenn Sie Ihr Programm in einer POSIX-konformen Umgebung ausführen. und wenn Sie Ihr Programm nicht in einer POSIX-konformen Umgebung ausführen, gilt POSIX nicht. Diese Anwendungsnutzung kann jedoch als Empfehlung verstanden werden: Wenn dies nicht funktioniert, können Sie sich berechtigt fühlen, sich bei Ihrem Anbieter zu beschweren, dass alles, was er in Bezug auf den Buchstaben der POSIX-Spezifikation tut, nicht seinem Geist entspricht.


Heh, das habe ich getconf PATHim Anwendungsbereich nicht einmal bemerkt . Vielen Dank!
Richard Hansen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.