stringtranslate.com

снаряд Томпсона

Оболочка Томпсона была первой оболочкой Unix , представленной в первой версии Unix в 1971 году и написанной Кеном Томпсоном . [1] Это был простой интерпретатор команд, не предназначенный для написания скриптов, но тем не менее вносивший несколько инновационных функций в интерфейс командной строки и приведший к разработке более поздних оболочек Unix.

История

Название «shell» для интерпретатора командной строки и концепция создания оболочки как пользовательской программы вне ядра операционной системы были введены в предшественнике Unix — Multics .

Ранней особенностью оболочки Thompson был компактный синтаксис для перенаправления ввода/вывода . В Multics перенаправление ввода или вывода команды требовало отдельных команд для запуска и остановки перенаправления; в Unix можно было просто добавить аргумент в командную строку, состоящий из символа <, за которым следовало имя файла для ввода или символа > для вывода, и оболочка перенаправляла ввод/вывод на время выполнения команды. Этот синтаксис уже присутствовал к выпуску первой версии Unix в 1971 году.

Более поздним дополнением стала концепция каналов . По предложению Дугласа Макилроя синтаксис перенаправления был расширен таким образом, чтобы вывод одной команды мог быть передан на вход другой команды. Первоначальный синтаксис канала, описанный в руководстве версии 3, был следующим:

команда1 >команда2>

Этот синтаксис оказался слишком неоднозначным и его легко было спутать с перенаправлением в файлы и из файлов — система не могла определить, является ли «command2» командой «command2» или файлом «command2». К версии 4 синтаксис изменился, чтобы использовать символы | и ^ для обозначения каналов:

команда1 | команда2

Это дает точно такой же результат, как:

команда1 ^ команда2

Символ > изменился на:

команда1 > файл1

Это поместит вывод команды command1 в файл file1.

Синтаксис оболочки Томпсона для перенаправления с помощью < и > и конвейеризации с помощью | оказался надежным и был принят большинством других оболочек Unix и командными оболочками нескольких других операционных систем, в первую очередь в DOS , OS/2 и Microsoft Windows .

Дизайн

Дизайн оболочки был намеренно минималистичным; даже операторы if и goto , необходимые для управления потоком программы, были реализованы как отдельные команды. [1]

Оболочка не имеет возможностей для комментариев, кроме встроенной команды :. Программисты просто пишут текст после этой команды, которая игнорирует все параметры и просто выполняется. Другие встроенные команды включают chdir, exit, login, newgrp, shift, и wait. [2]

Команда if объединяет использование современного Bourne shell test и if . Команда сначала ищет выражение (которое может быть похоже на современный test или включать внешнюю команду), а затем обрабатывает остальную часть командной строки как команду для выполнения, если условие оказывается истинным. Ветвь else отсутствует . [3]

goto реализован интересным образом, поскольку он отделен от оболочки. Когда его просят перейти к "LABEL", он ищет в текущем командном файле строку, которая говорит : LABEL(напомним, что она :просто игнорируется), а затем выходит. Когда оболочка пытается прочитать следующую строку, перепозиционированный файловый дескриптор направит ее в помеченное местоположение. [4]

В оболочке Томпсона нет перенаправления дополнительных файловых дескрипторов, кроме стандартного ввода и вывода (0 и 1). Перенаправление stderr (файловый дескриптор 2) также требует внешней программы-обертки, fd2. [5]

Оболочка поддерживает подстановку [2] , но фактически реализует ее, передавая ее команде glob, которая заменяет аргументы и вызывает запрошенную команду. [6]

Оболочка Thompson имеет позиционные параметры, но не имеет именованных переменных и доступа к переменным окружения. Она понимает создание фоновых команд с помощью &, аналогично оболочке Bourne. Она предлагает экранирование кавычек и обратную косую черту, хотя одинарные кавычки работают иначе, чем в оболочке Bourne. [2]

Упадок и замены

В результате упрощенного дизайна к моменту выхода в 1975 году версии 6 Unix стало ясно, что оболочка Томпсона неадекватна для большинства серьезных задач программирования.

В это время разработчики дистрибутива Programmer's Workbench UNIX , в первую очередь Джон Маши , начали модифицировать оболочку Thompson, чтобы сделать ее более подходящей для программирования. [1] Результат, известный как оболочка PWB или оболочка Mashey, включал в себя более продвинутые механизмы управления потоком и вводил переменные оболочки, но оставался ограниченным необходимостью оставаться совместимым с оболочкой Thompson.

Наконец, оболочка Thompson была заменена в качестве основной оболочки Unix оболочкой Bourne в версии 7 Unix и оболочкой C в 2BSD , обе выпущены в 1979 году. Поскольку практически все современные Unix и Unix-подобные системы произошли от V7 и 2BSD, оболочка Thompson, как правило, больше не используется. Однако она доступна как open-source как часть нескольких дистрибутивов Ancient Unix и была перенесена на современные Unix в качестве исторического экспоната.

Смотрите также

Ссылки

  1. ^ abc JR Mashey (1976-10-13). Использование командного языка в качестве языка программирования высокого уровня (PDF) . 2-я международная конференция по программной инженерии. стр. 169–176.
  2. ^ abc "tsh(1) (html) - TSH(1) - Руководства - Проект Etsh (V6Shell)". etsh.nl .
  3. ^ "if(1) (html) - IF(1) - Руководства - Проект Etsh (V6Shell)". etsh.nl .
  4. ^ "goto(1) (html) - GOTO(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 .

Внешние ссылки