Ну, точна послідовність може змінюватися, оскільки може бути псевдонім оболонки або функція, яка спочатку розширюється / інтерпретується до того, як реальна програма буде виконана, а потім відмінності для кваліфікованого імені файлу ( /usr/libexec/foo
) порівняно з тим, що шукатиметься у всіх каталогах з PATH
змінної оточення (тільки foo
). Крім того , деталі виконання можуть ускладнити ситуацію, оскільки foo | bar | zot
вимагає більше роботи для оболонки (кілька fork(2)
, dup(2)
і, звичайно ж , pipe(2)
серед інших системних викликів), в той час як що - щось на зразок exec foo
набагато менше роботи , як оболонка просто замінює себе нова програма (тобто її немає fork
). Важливими також є групи процесів (особливо група переднього плану, всі ПІД яких харчуються)SIGINT
коли хтось починає масувати на Ctrl+ C, сеанси, а також чи буде робота виконуватись у фоновому режимі, відслідковується ( foo &
) або фон, ігнорується ( foo & disown
). Деталі переадресації вводу / виводу також змінять речі, наприклад, якщо стандартний вхід закритий оболонкою ( foo <&-
) або відкрито файл як stdin ( foo < blah
).
strace
або подібні будуть інформативними щодо конкретних системних дзвінків, здійснених в ході цього процесу, і для кожного з цих викликів повинні бути довідкові сторінки. Прийнятним для читання на рівні системи буде будь-яка кількість глав з "Розширеного програмування Стівенса в середовищі UNIX", тоді як книга оболонок (наприклад, "Від Баша до Z Шелла") більш детально висвітлює сторону оболонки.