Il comportamento sembra coerente tra tutte le shell di reclami POSIX. Non vedo la necessità della necessità di spazio di manovra qui.
Non stai guardando abbastanza in profondità.
Negli anni '80, questo meccanismo non era di fatto standardizzato. Sebbene Dennis Ritchie lo avesse implementato, tale implementazione non aveva raggiunto il pubblico nel lato AT&T dell'universo. In effetti era disponibile solo pubblicamente e conosciuto in BSD; con script shell eseguibili non disponibili su Unix AT&T. Quindi non era ragionevole standardizzarlo. La situazione è esemplificata da questo documento contemporaneo, uno dei tanti:
Si noti che BSD consente #! interpreter
di eseguire direttamente i file che iniziano con , mentre SysV consente di eseguire direttamente solo i file a.out. Ciò significa che exec…()
potrebbe essere necessario modificare un'istanza di una delle routine in un programma BSD in SysV per eseguire invece l'interprete (tipicamente /bin/sh
) per quel programma.
- Stephen Frede (1988). "Programmazione su System X versione Y". Newsletter del gruppo di utenti australiani Unix Systems . Volume 9. Numero 4. p. 111.
Un punto importante qui è che stai guardando le shell, mentre l'esistenza di script di shell eseguibili è in realtà una questione di exec…()
funzioni. Ciò che fanno le shell include i precursori del meccanismo degli script eseguibili, ancora oggi presente in alcune shell (e anche oggi richiesto per il exec…p()
sottoinsieme di funzioni), ed è in qualche modo fuorviante. Ciò che lo standard deve affrontare a questo proposito è il funzionamento di exec…()
uno script interpretato e, al momento della creazione originale di POSIX , non funzionava in primo luogo su gran parte dello spettro dei sistemi operativi di destinazione .
Una domanda subordinata è perché questo non è stato standardizzato da allora, specialmente perché il meccanismo dei numeri magici per gli interpreti di script aveva raggiunto il pubblico nella parte AT&T dell'universo ed era stato documentato exec…()
nella System 5 Interface Definition , all'inizio degli anni '90 :
Un file di interprete inizia con una riga del modulo#! nome percorso [arg]
dove pathname è il percorso dell'interprete e arg è un argomento facoltativo. Quando si è exec
un file interprete, il sistema exec
è l'interprete specificato.
- exec
. System V Interface Definition . Volume 1. 1991.
Sfortunatamente, il comportamento rimane oggi quasi altrettanto divergente rispetto agli anni '80 e non esiste un comportamento veramente comune da standardizzare. Alcuni Unices (notoriamente HP-UX e FreeBSD, per esempio) non supportano gli script come interpreti per gli script. Se la prima riga è uno, due o molti elementi separati da spazi bianchi varia tra MacOS (e versioni di FreeBSD prima del 2005) e altri. La lunghezza massima del percorso supportato varia. ␀
e i caratteri che non fanno parte del set di caratteri POSIX per i nomi di file portatili sono complicati, così come gli spazi bianchi iniziali e finali. Ciò che l'argomento 0 °, 1 ° e 2 ° finisce per finire è anche complicato, con variazioni significative tra i sistemi. Alcuni attualmente conformi a POSIX ma non-I sistemi Unix non supportano ancora alcun meccanismo di questo tipo e il loro mandato li convertirà in non più conformi a POSIX.
Ulteriori letture