[T] поведінка виглядає послідовною між усіма оболонками скарги POSIX. Я не бачу необхідності в тому, щоб помахувати кімнатою.
Ви не дивитесь досить глибоко.
Ще в 1980-х цей механізм фактично не був стандартизований. Незважаючи на те, що Денніс Річі реалізував це, ця реалізація не дійшла до широкої громадськості з боку AT&T всесвіту. Це було фактично лише загальнодоступним та відомим у BSD; з виконавчими скриптами оболонки, недоступні в AT&T Unix. Тому стандартизувати це було нерозумно. Про стан справ свідчить цей сучасний доко, один із багатьох таких:
Зауважте, що BSD дозволяє файли, які починаються з #! interpreter
виконання, безпосередньо, тоді як SysV дозволяє виконувати лише a.out файли безпосередньо. Це означає, що екземпляр однієї з exec…()
підпрограм у програмі BSD, можливо, доведеться змінити під SysV, щоб /bin/sh
замість цього виконати інтерпретатор (типово ) для цієї програми.
- Стівен Фред (1988). Msgstr "Програмування на випуску системи X". Australian Unix Systems User Group Newsletter . Том 9. № 4. с. 111.
Тут важливим моментом є те, що ви дивитесь на оболонки, тоді як існування виконуваних скриптів оболонки насправді є питанням exec…()
функцій. Те, що роблять снаряди, включає: попередники механізму виконуваного сценарію, який і донині можна знайти в деяких оболонках (а також нині призначений для exec…p()
підмножини функцій), і дещо вводить в оману. Щодо цього стандарту потрібно звернути увагу, це те, як exec…()
працює інтерпретований сценарій, і на той час, коли POSIX був створений, він просто не працював, в першу чергу, у значній частині спектру цільових операційних систем .
Підпорядковане питання - чому це не було стандартизовано з тих пір, особливо як магічний механізм числення для інтерпретаторів сценаріїв був досягнута громадськість в AT & T боку Всесвіту і був задокументований для exec…()
в визначенні 5 Інтерфейсу системи , на рубежі 1990 - х років :
Файл перекладача починається з рядка форми#! ім'я шляху [arg]
де ім'я шляху - шлях інтерпретатора, а арг - необов'язковий аргумент. Коли ви exec
перекладаєте файл перекладача, система exec
використовує вказаний інтерпретатор.
- exec
. V Інтерфейс Визначення системи . Том 1. 1991 рік.
На жаль, сьогодні така поведінка залишається майже такою ж розбіжною, як і у 1980-х роках, і не існує справді загальної поведінки, яка б її стандартизувала. Деякі Unices (відомі, наприклад, HP-UX та FreeBSD) не підтримують сценарії як інтерпретатори сценаріїв. Будь перший рядок один, два чи багато елементів, розділених пробілом, залежить від MacOS (та версій FreeBSD до 2005 року) та інших. Максимальна підтримувана довжина шляху змінюється. ␀
та символи поза набором символів портативного імені файлів POSIX є складними, як і провідна та відстала пробіли. Те, що в результаті закінчується 0-м, 1-м та 2-м аргументом, також є складним, із значними варіаціями в різних системах. Деякі на даний момент сумісні з POSIX, але не є-Унікс-системи все ще не підтримують жодного такого механізму, і мандат на це перетворить їх у вже не сумісні з POSIX.
Подальше читання