оболочка Томпсона
Оригинальный автор(ы) | Кен Томпсон |
---|---|
Разработчик(и) | AT&T Bell Laboratories |
Первоначальный выпуск | 3 ноября 1971 г |
Операционная система | Unix и Unix-подобные |
Тип | оболочка Unix |
Оболочка Томпсона была первой оболочкой Unix , представленной в первой версии Unix в 1971 году и написанной Кеном Томпсоном . [1] Это был простой интерпретатор команд, не предназначенный для написания сценариев, но, тем не менее, он привнес несколько инновационных функций в интерфейс командной строки и привел к разработке более поздних оболочек Unix.
История
[ редактировать ]Название «оболочка» для интерпретатора командной строки и концепция превращения оболочки в пользовательскую программу вне ядра операционной системы были представлены в предшественнике Unix Multics .
Ранней особенностью оболочки Thompson был компактный синтаксис перенаправления ввода/вывода . В Multics для перенаправления ввода или вывода команды требовались отдельные команды для запуска и остановки перенаправления; в Unix можно было просто добавить аргумент в командную строку, состоящий из символа <, за которым следует имя файла для ввода или символ > для вывода, и оболочка будет перенаправлять ввод-вывод на время выполнения команды. Этот синтаксис уже присутствовал в первой версии Unix в 1971 году.
Более поздним дополнением стала концепция труб . По предложению Дугласа Макилроя синтаксис перенаправления был расширен таким образом, чтобы вывод одной команды мог передаваться на вход другой команды. Исходный синтаксис канала, описанный в руководстве по версии 3, был:
command1 >command2>
Этот синтаксис оказался слишком двусмысленным, и его легко спутать с перенаправлением в файлы и из них: система не может определить, является ли «команда2» командой «команда2» или файлом «команда2». В версии 4 синтаксис изменился и стал использовать | и символы ^ для обозначения труб:
command1 | command2
Это дает точно такой же результат, как:
command1 ^ command2
Символ > изменился на:
command1 > file1
Это поместит вывод команды1 в файл1.
Синтаксис оболочки Thompson для перенаправления с помощью < и > и конвейерной передачи с помощью | оказался надежным и был принят большинством других оболочек Unix и командных оболочек нескольких других операционных систем, особенно в DOS , OS/2 и Microsoft Windows .
Дизайн
[ редактировать ]Дизайн корпуса был намеренно минималистичным; даже операторы if и goto , необходимые для управления ходом программы, были реализованы как отдельные команды. [1]
В оболочке нет средств для комментариев, кроме встроенной команды. :
. Программисты просто пишут текст после этой команды, которая игнорирует все параметры и просто завершается успешно. Другие встроенные функции включают в себя chdir
, exit
, login
, newgrp
, shift
, и wait
. [2]
Команда if сочетает в себе использование современного теста оболочки Bourne и if . Команда сначала ищет выражение (которое может быть похоже на современный тест или включать внешнюю команду), а затем рассматривает остальную часть командной строки как команду, которую необходимо выполнить, если условие окажется истинным. филиала нет Другого . [3]
goto реализован интересным образом, поскольку он отделен от оболочки. Когда его просят перейти к «LABEL», он ищет в текущем командном файле строку, в которой говорится: : LABEL
(напомним, что :
просто игнорируется), а затем завершается. Когда оболочка пытается прочитать следующую строку, измененный файловый дескриптор направит ее в помеченное место. [4]
В оболочке Thompson нет перенаправления дополнительных файловых дескрипторов, кроме стандартных ввода и вывода (0 и 1). Для перенаправления stderr (файловый дескриптор 2) также требуется внешняя программа-оболочка. fd2
. [5]
Оболочка поддерживает подстановку, [2] но на самом деле реализует его, отложив его до glob
команда, которая заменяет аргументы и вызывает запрошенную команду. [6]
Оболочка Thompson имеет позиционные параметры, но не имеет именованных переменных и доступа к переменным среды. Он понимает создание фоновых команд с помощью &
, аналогичный оболочке Bourne. Он предлагает кавычки и обратную косую черту, хотя одинарные кавычки работают иначе, чем в оболочке Bourne. [2]
Упадок и замены
[ редактировать ]В результате упрощенного дизайна к выпуску версии 6 Unix в 1975 году стало ясно, что оболочка Томпсона не подходит для большинства серьезных задач программирования.
В это время разработчики UNIX-дистрибутива Programmer's Workbench , в первую очередь Джон Мэши , начали модифицировать оболочку Томпсона, чтобы сделать ее более подходящей для программирования. [1] Результат, известный как оболочка PWB или оболочка Mashey, включал в себя более совершенные механизмы управления потоком данных и ввел переменные оболочки, но оставался ограниченным необходимостью оставаться совместимым с оболочкой Thompson.
Наконец, оболочка Thompson была заменена в качестве основной оболочки Unix оболочкой Bourne в версии 7 Unix и оболочкой C в 2BSD , выпущенными в 1979 году. Поскольку практически все современные Unix и Unix-подобные системы произошли от V7 и 2BSD, Оболочка Томпсона вообще больше не используется. Однако он доступен с открытым исходным кодом как часть нескольких дистрибутивов исходного кода Ancient Unix и был портирован на современные Unix в качестве исторического экспоната.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б с Дж. Р. Машей (13 октября 1976 г.). Использование командного языка в качестве языка программирования высокого уровня (PDF) . 2-я Международная конференция по программной инженерии. стр. 169–176.
- ^ Перейти обратно: а б с "tsh(1) (html) - TSH(1) - Руководства - Проект Etsh (V6Shell)" . etsh.nl.
- ^ "if(1) (html) - IF(1) - Руководства - Etsh Project (V6Shell)" . etsh.nl.
- ^ «goto(1) (html) — ПЕРЕЙТИ (1) — Руководства — Проект Etsh (V6Shell)» . etsh.nl.
- ^ "fd2(1) (html) - FD2(1) - Руководства - Проект Etsh (V6Shell)" . etsh.nl.
- ^ "glob(1) (html) - GLOB(1) - Руководства - Проект Etsh (V6Shell)" . etsh.nl.
Внешние ссылки
[ редактировать ]- Страница руководства по оболочке Thompson в Unix 1st Edition .
- Эволюция системы разделения времени Unix - описывает раннюю разработку оболочки.
- Происхождение оболочки Bourne - страницы руководства для оболочек Томпсона 3-го, 4-го и 6-го изданий, а также другие ресурсы по ранним оболочкам.
- Проект Etsh (V6Sh) - оболочка Thompson и связанные с ней утилиты, портированные на современные системы Unix (плюс обратно совместимая «расширенная версия» с некоторыми современными функциями)