[T] Zachowanie wydaje się spójne między wszystkimi powłokami reklamacyjnymi POSIX. Nie widzę tu potrzeby poruszania się po pokoju.
Nie patrzysz wystarczająco głęboko.
W latach 80. mechanizm ten nie był de facto znormalizowany. Chociaż Dennis Ritchie go wdrożył, wdrożenie to nie dotarło do opinii publicznej po stronie AT&T wszechświata. Był efektywnie tylko publicznie dostępny i znany w BSD; z wykonywalnymi skryptami powłoki niedostępnymi w systemie AT&T Unix. W związku z tym standaryzacja nie była rozsądna. Stan rzeczy jest ilustrowany tym współczesnym doco, jednym z wielu takich:
Zauważ, że BSD pozwala #! interpreter
na bezpośrednie uruchamianie plików, a SysV pozwala na bezpośrednie wykonywanie tylko plików a.out. Oznacza to, że wystąpienie jednej z exec…()
procedur w programie BSD może wymagać zmiany w SysV, aby /bin/sh
zamiast tego wykonać interpreter (typlicznie ) dla tego programu.
- Stephen Frede (1988). „Programowanie w systemie X wydanie Y”. Biuletyn Grupy Użytkowników Australian Unix Systems . Tom 9. Liczba 4. p. 111.
Ważnym punktem jest to, że patrzysz na powłoki, podczas gdy istnienie wykonywalnych skryptów powłoki jest w rzeczywistości kwestią exec…()
funkcji. To, co robią powłoki, obejmuje prekursory wykonywalnego mechanizmu skryptowego, który do dziś można znaleźć w niektórych powłokach (a także obecnie jest obowiązkowy dla exec…p()
podzbioru funkcji) i jest nieco mylący. W tym względzie normą należy się zająć to, jak exec…()
działa interpretowany skrypt, a w momencie, gdy POSIX był pierwotnie tworzony , po prostu nie działał przede wszystkim w znacznej części spektrum docelowych systemów operacyjnych .
Podporządkowane pytanie, dlaczego nie zostało to ujednolicone ponieważ, zwłaszcza jako mechanizm magiczna liczba dla tłumaczy skryptów nie osiągnął publicznej wiadomości w stronę AT & T wszechświata i zostało udokumentowane exec…()
w definicji systemu 5 interfejsu , na przełomie 1990 :
Plik tłumacza zaczyna się od wiersza formularza#! nazwa ścieżki [arg]
gdzie pathname jest ścieżką interpretera, a arg jest opcjonalnym argumentem. Gdy masz exec
plik interpretera, system exec
jest określonym tłumaczem.
- exec
. System V Interfejs Definicja . Tom 1. 1991.
Niestety, zachowanie jest dziś prawie tak bardzo rozbieżne jak w latach 80. i nie ma naprawdę powszechnego zachowania, które można by znormalizować. Niektóre Unices (na przykład HP-UX i FreeBSD) nie obsługują skryptów jako interpretatorów skryptów. To, czy pierwszy wiersz to jeden, dwa lub wiele elementów oddzielonych spacjami, różni się w MacOS (i wersjach FreeBSD przed 2005) i innych. Maksymalna obsługiwana długość ścieżki jest różna. ␀
znaki spoza zestawu znaków przenośnej nazwy pliku POSIX są trudne, podobnie jak początkowe i końcowe białe znaki. To, co kończy się argumentem 0, 1 i 2, jest również trudne, ze znacznymi różnicami w zależności od systemu. Niektóre obecnie zgodne z POSIX, ale nie- Systemy Unix nadal nie obsługują żadnego takiego mechanizmu, a nałożenie na niego mandatu spowodowałoby, że przestałyby być zgodne z POSIX.
Dalsza lektura