Jump to content

оболочка Томпсона

оболочка Томпсона
Оригинальный автор(ы) Кен Томпсон
Разработчик(и) AT&T Bell Laboratories
Первоначальный выпуск 3 ноября 1971 г .; 52 года назад ( 1971-11-03 )
Операционная система 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 в качестве исторического экспоната.

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б с Дж. Р. Машей (13 октября 1976 г.). Использование командного языка в качестве языка программирования высокого уровня (PDF) . 2-я Международная конференция по программной инженерии. стр. 169–176.
  2. ^ Перейти обратно: а б с "tsh(1) (html) - TSH(1) - Руководства - Проект Etsh (V6Shell)" . etsh.nl.
  3. ^ "if(1) (html) - IF(1) - Руководства - Etsh Project (V6Shell)" . etsh.nl.
  4. ^ «goto(1) (html) — ПЕРЕЙТИ (1) — Руководства — Проект Etsh (V6Shell)» . etsh.nl.
  5. ^ "fd2(1) (html) - FD2(1) - Руководства - Проект Etsh (V6Shell)" . etsh.nl.
  6. ^ "glob(1) (html) - GLOB(1) - Руководства - Проект Etsh (V6Shell)" . etsh.nl.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7faa349f7cef9d98896d52f53f7f4c36__1686204840
URL1:https://arc.ask3.ru/arc/aa/7f/36/7faa349f7cef9d98896d52f53f7f4c36.html
Заголовок, (Title) документа по адресу, URL1:
Thompson shell - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)