Czy POSIX gwarantuje, że standardowe narzędzia są w ŚCIEŻCE?


11

W sekcji „Wyszukiwanie i wykonywanie poleceń” specyfikacja POSIX mówi, że PATHjest przeszukiwana podczas znajdowania narzędzia do wykonania (z pewnymi wyjątkami). Czy specyfikacja wspomina gdziekolwiek, które PATHzostanie zainicjowane na wartość, która gwarantuje, że zostaną znalezione wszystkie standardowe narzędzia?

Czy też muszę zrobić coś takiego, aby zagwarantować, że nigdy nie dostanę błędu „nie znaleziono polecenia” podczas próby uruchomienia standardowego narzędzia?

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

(patrz specyfikacja commandnarzędzia POSIX )

Odpowiedzi:


13

Tak i nie. W środowisku POSIX narzędzia muszą zachowywać się zgodnie z opisem w specyfikacji. W praktyce oznacza to, że muszą być obecne zgodne wersje narzędzi $PATH. Jednak podczas uruchamiania programu w systemie zgodnym z POSIX może być uruchomiony w środowisku niezgodnym. W praktyce często zdarza się, że system operacyjny ma starszy tryb i tryb POSIX i domyślnie znajduje się w starszym trybie. Co gorsza niż brak niektórych poleceń, w starszym trybie występują zwykle niezgodności, takie jak opcje o różnych znaczeniach.

Można pobrać dobra PATHze getconf. Oczywiście jest to trudne, ponieważ getconfw oryginale $PATHmoże nie być właściwe. Sposób użycia aplikacji dla polecenia pokazuje sposób:

command -p getconf PATH

O ile rozumiem specyfikację, nie jest to konieczne, jeśli program jest uruchamiany w środowisku zgodnym z POSIX; a jeśli nie uruchamiasz programu w środowisku zgodnym z POSIX, POSIX nie ma zastosowania. Jednak użycie tej aplikacji można potraktować jako zalecenie: jeśli to nie zadziała, możesz czuć się uprawniony do złożenia skargi do swojego dostawcy, że cokolwiek robią w związku z literą specyfikacji POSIX, nie są zgodne z jego duchem.


Heh, nawet tego nie zauważyłem getconf PATHw sekcji dotyczącej użycia aplikacji. Dzięki!
Richard Hansen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.