Введение

Unix shell

Оболочка PWB (также известная как Mashey shell) была оболочкой Unix.

История

PWB-шелл был модифицированной (и, как правило, ограниченной в плане обратной совместимости) версией Thompson-шелла с дополнительными функциями, повышающими удобство использования при программировании. Его поддерживали Джон Маши и другие специалисты (Дик Хейт, Алан Глассер). PWB/UNIX впервые появился с Research Unix 4th Edition в середине октября 1973 года и часто обновлялся в последующие несколько лет, поскольку отдел PWB отслеживал изменения в Research Unix и добавлял некоторые функции. PWB-шелл был выпущен в середине 1975 года и оставался доступным в PWB/UNIX, основанном на Version 6 Unix. В Version 7 Unix (1979) PWB-шелл был вытеснен Bourne-шеллом. PWB-шелл был стандартной оболочкой для PWB/UNIX примерно в 1975–78 годах, но не работал ни на одной версии Research Unix, так как требовал нового системного вызова, позволяющего задать имя пользователя при входе в систему, его домашний каталог и TTY для их получения.

Примечательные особенности

В оболочке PWB было введено несколько функций, которые сохранились во многих последующих оболочках. Команды `and` и `or` стали внутренними для оболочки и были расширены, чтобы позволить `&&` и `||`, а также были введены конструкции `if`, `then`, `else` и `fi`, и появилась возможность игнорировать прерывания или перехватывать их для выполнения очистки. Можно было использовать простые переменные, хотя их имена ограничивались одной буквой, а некоторые буквы были зарезервированы для специальных целей, некоторые из которых являются предшественниками переменных окружения, встречающихся во всех системах Unix начиная с 7-й версии. Например, переменная `PATH` является предком `$PATH`, используемой для избежания жесткого кодирования путей. Переменная `HOME` является предком `$HOME`, которая позволяет пользователям искать команды в выбранных ими каталогах. В отличие от большинства UNIX-систем того времени, оригинальный компьютерный центр PWB/UNIX был общим для нескольких групп программистов, которые не могли изменять содержимое каталогов `/bin` или `/usr/bin`, но хотели создавать свои собственные наборы общих команд. Кроме того, механизм поиска команд в оболочке был расширен, чтобы позволить вызывать процедуры оболочки как бинарные команды, то есть, если оболочка находила небинарный файл, помеченный как исполняемый, она запускала новый экземпляр оболочки для чтения этого файла как скрипта оболочки. Таким образом, пользователи могли вводить `scriptname` вместо `sh scriptname`. Все это поведение было оформлено в виде функции `exec`, которая является предком `system`, чтобы позволить любой программе вызывать команды так же, как оболочка. Символ `$`, ранее использовавшийся для идентификации аргументов в скрипте оболочки, стал маркером для разыменования переменной и мог использоваться для вставки значения переменной в строку в двойных кавычках. (Помимо более поздних оболочек, эта функция также позже появилась в языках программирования Perl и PHP.)

Потомки

Эти особенности не смогли компенсировать недостатки оболочки Томпсона, поэтому Стивен Борн написал новую оболочку с нуля. Эта оболочка Bourne была несовместима с оболочками Томпсона и PWB, но включала аналоги большинства функций оболочки PWB, реализованные с нуля, а не постепенно, и после широкого обсуждения среди участников разработки. В частности, переменные окружения и связанные с ними механизмы были разработаны Стивеном Борном, Джоном Маши и Деннисом Ричи как универсальный механизм, призванный заменить более ранние, менее функциональные возможности. После того, как оболочка Bourne была принята в качестве стандартной в Unix версии 7, использование оболочки PWB постепенно прекратилось, хотя некоторое время в Bell Labs существовал внутренний курс под названием «Программирование на Bourne Shell для программистов Mashey Shell». C-шелл, разработанный до публичного релиза Bourne shell, также унаследовал некоторые особенности оболочки PWB.