Оболочка C - Википедия - C shell

Оболочка C
tcsh и sh бок о бок на рабочем столе Mac OS X
tcsh и sh бок о бок на рабочем столе Mac OS X
Оригинальный автор (ы)Билл Джой
изначальный выпуск1978; 42 года назад (1978)
Стабильный выпуск
6.20.00 / 24 ноября 2016 г.; 4 года назад (2016-11-24)[1]
Репозиторий Отредактируйте это в Викиданных
Написано вC
Операционная системаBSD, UNIX, Linux, macOS
ТипОболочка Unix
ЛицензияЛицензия BSD
C Shell работает на Службы Windows для UNIX

В Оболочка C (csh или улучшенная версия, tcsh) это Оболочка Unix сделано Билл Джой в то время как он был аспирантом в Калифорнийский университет в Беркли в конце 1970-х гг. Он получил широкое распространение, начиная с выпуска 2BSD Распространение программного обеспечения Беркли (BSD), которую Джой впервые распространила в 1978 году.[2][3] Другими первыми авторами идей или кода были Майкл Убелл, Эрик Оллман, Майк О'Брайен и Джим Калп.[4]

Оболочка C - это командный процессор обычно запускается в текстовом окне, позволяя пользователю вводить команды. Оболочка C также может читать команды из файла, называемого сценарий. Как и все оболочки Unix, он поддерживает имя файла подстановочные знаки, трубопровод, здесь документы, подстановка команд, переменные и управляющие структуры за проверка состояния и итерация. Что отличало оболочку C от других, особенно в 1980-х, так это ее интерактивные возможности и общий стиль. Его новые функции сделали его проще и быстрее в использовании. Общий стиль языка больше походил на C и считался более читабельным.

Во многих системах, таких как macOS и Red Hat Linux, csh на самом деле tcsh, улучшенная версия csh. Часто один из двух файлов либо жесткая ссылка или символическая ссылка к другому, так что любое имя относится к одной и той же улучшенной версии оболочки C.

На Debian и некоторые производные (в том числе Ubuntu ) существует два разных пакета: csh и tcsh. Первый основан на оригинальной BSD-версии csh.[5][6] и последний - улучшенный tcsh.[7][8]

tcsh добавил концепции завершения имени файла и команд и редактирования командной строки, заимствованные из Тенекс система, которая является источником "т".[9] Поскольку он только добавил функциональность и не изменил то, что там было, tcsh остался обратная совместимость[10] с исходной оболочкой C. Хотя он начинался как побочная ветка от исходного дерева исходных текстов, созданного Джой, теперь tcsh является основной ветвью для продолжающейся разработки. tcsh очень стабилен, но новые выпуски продолжают появляться примерно раз в год, в основном состоящие из мелких исправлений ошибок.[11]

Цели и особенности дизайна

Основными целями разработки оболочки C было то, чтобы она больше походила на Язык программирования C и что он должен быть лучше для интерактивного использования.

Больше похоже на C

Система Unix была написана почти исключительно на C, поэтому первой целью оболочки C был командный язык, который был более стилистически совместим с остальной системой. Ключевые слова, использование круглых скобок, грамматика встроенных выражений оболочки C и поддержка массивов - все это сильно повлияло на C.

По сегодняшним стандартам оболочка C может показаться не более похожей на C, чем многие другие популярные языки сценариев. Но на протяжении 80-х и 90-х годов разница казалась разительной, особенно по сравнению с Оболочка Борна (также известный как ш), доминирующая в то время оболочка, записанная Стивен Борн в Bell Labs. Этот пример иллюстрирует более традиционный операторы выражения и синтаксис.

Bourne sh не хватало грамматика выражений. Условие в квадратных скобках должно было быть оценено более медленными средствами запуска внешнего тест программа. ш если команда приняла свои аргументные слова как новую команду, которая будет запускаться как дочерний процесс. Если ребенок вышел с нуля код возврата, sh будет искать предложение then (отдельный оператор, но часто пишется, соединенный в одной строке точкой с запятой) и запускает этот вложенный блок. В противном случае он запустил бы else. Жесткое связывание тестовая программа как "тест" и "["давало преимущество в виде квадратных скобок и создавало впечатление, что функциональные возможности test являются частью языка sh. Использование в sh ключевого слова reversed для обозначения конца блока управления было стилем, заимствованным из АЛГОЛ 68.[12]

Напротив, csh может вычислять выражение напрямую, что делает его быстрее. Он также заявил о лучшей читаемости: его выражения использовали грамматика и набор операторов, в основном скопированных с C, ни одно из его ключевых слов не было перевернуто, и общий стиль также был больше похож на C.

Вот второй пример сравнения скриптов, которые вычисляют первые 10 степеней двойки.

Опять же из-за отсутствия грамматики выражений сценарий sh использует подстановка команд и expr команда. (Современное Оболочка POSIX делает иметь такую ​​грамматику: утверждение можно было бы написать я = $ ((я * 2)) или же : $ ((я * = 2)).)

Наконец, вот третий пример, показывающий разные стили для оператор переключения.

В сценарии sh ";;"отмечает конец каждого случая, потому что в противном случае sh запрещает пустые операторы.

Улучшения для интерактивного использования

Вторая цель заключалась в том, чтобы оболочка C была лучше для интерактивного использования. Он представил множество новых функций, которые сделали его проще, быстрее и многое другое. дружелюбный использовать, набирая команды на терминале. Пользователи могли выполнять задачи с меньшим количеством нажатий клавиш, и он работал быстрее. Наиболее важными из этих новых функций были механизмы истории и редактирования, псевдонимы, стеки каталогов, тильда, cdpath, управление заданиями и хеширование пути. Эти новые функции оказались очень популярными, и с тех пор многие из них были скопированы другими оболочками Unix.

История

История позволяет пользователям вспоминать предыдущие команды и повторно запускать их, набрав всего несколько быстрых нажатий клавиш. Например, два восклицательных знака "!!", набранная как команда и именуемая "ПИФ-паф,"вызвать выполнение непосредственно предшествующей команды. Другие сочетания коротких клавиш, например, "!$"означает только последний аргумент предыдущей команды, позволяет вставлять фрагменты предыдущих команд вместе и редактировать для формирования новой команды.

Операторы редактирования

Редактировать можно не только текст предыдущей команды, но и замену переменных. Операторы варьируются от простого поиска / замены строки до анализа имени пути для извлечения определенного сегмента.

Псевдонимы

Псевдонимы позволяют пользователю вводить имя псевдонима, а оболочка C расширяет его внутренне в любой набор слов, определенный пользователем. Во многих простых ситуациях псевдонимы работают быстрее и удобнее сценариев.

Стек каталогов

Каталог куча позволяет пользователю толкать или хлопать в текущий рабочий каталог, упрощая переход между разными местами файловой системы.

Обозначение тильды

Обозначение тильды предлагает сокращенный способ указания путей относительно домашний каталог с использованием "~" персонаж.

Завершение имени файла

В ключ выхода может использоваться в интерактивном режиме для отображения возможных дополнений имени файла в конце текущей командной строки.

Cdpath

Cdpath расширяет понятие путь поиска к CD (сменить каталог) команда: Если указанный каталог отсутствует в Текущий каталог, csh попытается найти его в каталогах cdpath.

Контроль работы

Вплоть до 1980-х годов у большинства пользователей были только простые терминалы в символьном режиме, которые исключали использование нескольких окон, поэтому они могли работать только над одной задачей за раз. Элемент управления заданием оболочки C позволяет пользователю приостановить текущее действие и создать новый экземпляр оболочки C, называемый заданием, путем ввода ^ Z. Затем пользователь мог переключаться между заданиями, используя фг команда. Говорилось, что на переднем плане активная работа. Другие задания были либо приостановлены (остановлены), либо выполнялись в фон.

Хеширование пути

Хеширование пути ускоряет поиск исполняемых файлов оболочкой C. Вместо того, чтобы выполнять вызов файловой системы в каждом каталоге пути, по одному, пока он либо не найдет файл, либо не исчерпает все возможности, оболочка C обращается к внутреннему хеш-таблица строится путем сканирования каталогов пути. Эта таблица обычно может указать оболочке C, где найти файл (если он существует) без необходимости поиска, и может быть обновлена ​​с помощью перефразировать команда.

Обзор языка

Оболочка C работает по одной строке за раз. Каждая строка токенизированный в набор слов, разделенных пробелами или другими символами со специальным значением, включая круглые скобки, конвейеры и операторы перенаправления ввода / вывода, точки с запятой и амперсанды.

Основные утверждения

Базовый оператор - это просто выполнение команды. Первое слово используется как имя запускаемой команды и может быть внутренней командой, например, эхо, или внешняя команда. Остальные слова передаются команде как аргументы.

На базовом уровне утверждения вот некоторые особенности грамматики:

Подстановочные знаки

Оболочка C, как и все оболочки Unix, обрабатывает любой аргумент командной строки, содержащий символы подстановки, как образец и заменяет его списком всех совпадающих имен файлов (см. шарик ).
* соответствует любому количеству символов.
? соответствует любому одиночному символу.
[...] соответствует любому из символов в квадратных скобках. Допускаются диапазоны с использованием дефиса.
[^...] соответствует любому персонажу нет в комплекте.
Оболочка C также представила несколько удобных обозначений (иногда называемых расширенная подстановка ), поскольку копируется другими оболочками Unix.
abc {def, ghi} является чередование (он же расширение скобки ) и расширяется до abcdef abcghi.
~ означает домашний каталог текущего пользователя.
~ пользователь средства Пользователь'домашний каталог.
Множественные подстановочные знаки на уровне каталога, например, "* / *. c", поддерживаются.
Начиная с версии 6.17.01, рекурсивный подстановочный знак а-ля zsh (например, "** / *. c" или же "*** / *. html") также поддерживается глобус вариант.
Предоставление оболочке ответственности за интерпретацию подстановочных знаков было важным решением для Unix. Это означало, что подстановочные знаки будут работать с каждой командой и всегда одинаково. Однако это решение основывалось на способности Unix эффективно передавать длинные списки аргументов через exec системный вызов, который csh использует для выполнения команд. Напротив, на Windows, интерпретация подстановочных знаков обычно выполняется каждым приложением. Это наследие MS-DOS, которая позволяла передавать приложению только 128-байтовую командную строку, что делало использование подстановочных знаков в командной строке DOS непрактичным. Хотя современные Windows может передавать командные строки размером примерно до 32 КБ Unicode символов, бремя интерпретации подстановочных знаков остается на приложении.

Перенаправление ввода / вывода

По умолчанию, когда csh запускает команду, команда наследует дескрипторы файла csh stdio для стандартный ввод, стандартный вывод и stderr, которые обычно все указывают на окно консоли где запущена оболочка C. Операторы перенаправления ввода-вывода позволяют команде использовать файл вместо ввода или вывода.
> файл означает, что стандартный вывод будет записан в файл, перезаписывая его, если он существует, и создавая его, если нет. Ошибки по-прежнему приходят в окно оболочки.
>& файл означает, что и stdout, и stderr будут записаны в файл, перезаписывая его, если он существует, и создавая его, если нет.
>> файл означает, что стандартный вывод будет добавлен в конец файл.
>>& файл означает, что и stdout, и stderr будут добавлены в конец файл.
< файл означает, что stdin будет прочитан из файл.
<< нить это здесь документ. Stdin будет читать следующие строки до той, которая соответствует нить.

Присоединение

Команды можно объединять в одной строке.
; означает выполнение первой команды, а затем следующей.
&& означает запустить первую команду и, если она завершится успешно с 0 код возврата, запустите следующий.
|| означает выполнить первую команду и, если она завершится неудачно с ненулевым кодом возврата, выполнить следующую.

Трубопровод

Команды могут быть связаны с помощью канала, который заставляет вывод одной команды подавать на ввод следующей. Обе команды запускаются одновременно.
| означает подключение stdout к stdin следующей команды. Ошибки по-прежнему приходят в окно оболочки.
|& означает подключение как stdout, так и stderr к stdin следующей команды.
Работать одновременно означает «параллельно». В многоядерный (многопроцессорная), передаваемые по конвейеру команды могут выполняться буквально одновременно, в противном случае планировщик в операционной системе временные интервалы между ними.
По команде, например, "а | б"оболочка создает трубка, затем запускаются оба а и б с stdio для двух перенаправленных команд, чтобы а записывает свой стандартный вывод на вход канала, в то время как б читает стандартный ввод из вывода канала. Каналы реализуются операционной системой с определенной степенью буферизации, так что а может писать некоторое время, прежде чем канал заполнится, но как только канал заполнится, любая новая запись будет блокироваться внутри ОС до тех пор, пока б читает достаточно, чтобы разблокировать новые записи. Если б пытается прочитать больше данных, чем доступно, блокируется до тех пор, пока а записал больше данных или пока канал не закроется, например, если а выходы.

Замена переменных

Если слово содержит знак доллара, "$", следующие символы принимаются в качестве имени переменной, а ссылка заменяется значением этой переменной. Различные операторы редактирования, введенные как суффиксы ссылки, позволяют редактировать имя пути (например,": e"извлечь только расширение) и другие операции.

Цитирование и экранирование

Механизмы цитирования позволяют использовать специальные символы, такие как пробелы, подстановочные знаки, круглые скобки и знаки доллара, как буквальный текст.
\ означает принять следующий символ как обычный буквальный символ.
"нить" это слабая цитата. Заключенные пробелы и подстановочные знаки принимаются как литералы, но подстановки переменных и команд по-прежнему выполняются.
'нить' это сильная цитата. Вся заключенная строка воспринимается как литерал.

Подстановка команд

Подстановка команд позволяет использовать вывод одной команды в качестве аргументов для другой.
`команда` означает взять вывод команда, проанализируйте его на слова и вставьте обратно в командную строку.

Фоновое выполнение

Обычно, когда оболочка C запускает команду, она ожидает завершения команды, прежде чем дать пользователю другое приглашение, сигнализирующее о том, что можно ввести новую команду.
команда & означает начало команда в фоновом режиме и немедленно запросить новую команду.

Субоболочки

Подоболочка - это отдельная дочерняя копия оболочки, которая наследует текущее состояние, но затем может вносить изменения, например, в текущий каталог, не затрагивая родительский.
( команды ) означает бежать команды в подоболочке.

Структуры управления

Оболочка C предоставляет управляющие структуры для обоих проверка состояния и итерация. Управляющими структурами проверки условий являются операторы if и switch. Структуры управления итерацией - это операторы while, foreach и repeat.

если заявление

Есть две формы если заявление. Краткая форма набирается в одну строку, но может указывать только одну команду, если выражение истинно.

       если ( выражение ) команда

В длинной форме используются ключевые слова then, else и endif, позволяющие вставлять блоки команд внутри условия.

       если ( выражение1 ) тогда          команды       иначе если ( выражение2 ) тогда          команды       ...       еще          команды       endif

Если ключевые слова else и if появляются в одной строке, csh цепляет, а не вкладывает их; блок завершается одним endif.

оператор переключения

Оператор switch сравнивает строку со списком шаблонов, который может содержать подстановочные знаки. Если ничего не совпадает, выполняется действие по умолчанию, если оно есть.

       выключатель ( нить )          дело pattern1:             команды             ломается          дело pattern2:             команды             ломается          ...          дефолт:             команды             ломается       конец

пока заявление

В пока заявление оценивает выражение. Если это правда, оболочка запускает вложенные команды, а затем повторяет их, пока выражение остается истинным.

       пока ( выражение )          команды       конец

оператор foreach

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

       для каждого переменная цикла ( список ценностей )          команды       конец

повторить заявление

Оператор repeat повторяет одну команду целое число раз.

       повторение целое число команда

Переменные

Оболочка C реализует как оболочку, так и переменные среды.[13] Переменные среды, созданные с помощью Setenv оператор, всегда простые строки, передаваемые любому дочерние процессы, которые получают эти переменные через envp [] аргумент главный().

Переменные оболочки, созданные с помощью набор или же @ операторы являются внутренними для оболочки C. Они не передаются дочерним процессам. Переменные оболочки могут быть простыми строками или массивами строк. Некоторые из переменных оболочки предопределены и используются для управления различными внутренними параметрами оболочки C, например, что должно произойти, если подстановочный знак не соответствует чему-либо.

В текущих версиях csh строки могут иметь произвольную длину, вплоть до миллионов символов.

Выражения

Оболочка C реализует грамматику 32-битных целочисленных выражений с операторами, заимствованными из C, но с несколькими дополнительными операторами для сравнения строк и тестов файловой системы, например, проверки существования файла. Операторы должны отделяться от своих операндов пробелами. Переменные обозначаются как $имя.

Приоритет оператора также заимствован из C, но с другими ассоциативность операторов правила для разрешения неоднозначности того, что идет первым в последовательности операторов с равным приоритетом. В C ассоциативность для большинства операторов слева направо; в оболочке C - справа налево. Например,

Скобки в примере оболочки C предназначены для того, чтобы операторы битового сдвига не путались с операторами перенаправления ввода-вывода. На любом языке всегда можно использовать круглые скобки, чтобы явно указать желаемый порядок оценки, даже если только для ясности.

Прием

Несмотря на то что Стивен Борн сам признал, что csh превосходит его оболочку для интерактивного использования,[14] он никогда не был так популярен для написания сценариев. Первоначально и до 1980-х годов нельзя было гарантировать наличие csh во всех системах Unix, но sh мог, что делало его лучшим выбором для любых сценариев, которые, возможно, придется запускать на других машинах. К середине 1990-х годов csh был широко доступен, но использование csh для написания сценариев столкнулось с новой критикой со стороны POSIX комитет[15] в котором указано, что должна быть только одна предпочтительная оболочка, KornShell, как для интерактивных целей, так и для сценариев. Оболочка C также подверглась критике со стороны других.[16][17] по поводу предполагаемых дефектов синтаксиса, отсутствующих функций и плохой реализации оболочки C.

  • Синтаксические дефекты: обычно были простые, но ненужные несоответствия в определении языка. Например, набор, Setenv и псевдоним все команды делали в основном одно и то же, а именно связывали имя со строкой или набором слов. Но у всех троих были небольшие, но ненужные различия. Знак равенства требовался для набор но не для Setenv или же псевдоним; круглые скобки были обязательны вокруг списка слов для набор но не для Setenv или же псевдоними т. д. Аналогично если, выключатель и конструкции цикла используют ненужные разные ключевые слова (endif, конец и конец), чтобы завершить вложенные блоки.
  • Недостающие функции: чаще всего упоминается отсутствие возможности манипулировать stdio файл обрабатывается независимо и поддерживает функции. В то время как в функциях оболочки Bourne отсутствовали только локальные переменные, псевдонимы Csh - ближайший аналог функций в Csh - ограничивались отдельными строками кода, хотя большинство конструкций управления потоком требовали распознавания новой строки. В результате скрипты Csh не могли быть функционально разбиты, как могли бы быть сами программы C, и более крупные проекты имели тенденцию переходить либо на сценарии оболочки Bourne, либо на код C.
  • Реализация: в которой использовался специальный парсер, вызвал самую серьезную критику. К началу 1970-х гг. компилятор технология была достаточно зрелой[18] что большинство новых языковых реализаций использовали либо сверху вниз или же восходящий парсер способен распознавать полностью рекурсивный грамматика. Неизвестно, почему для оболочки C был выбран специальный дизайн. Возможно, это просто так, как Джой сказал в интервью в 2009 году: «Когда я начал делать это с Unix, я был не очень хорошим программистом».[19] Специальная конструкция означала, что язык оболочки C не был полностью рекурсивным. Существовал предел сложности команды, которую он мог обработать.

Он работал с большинством интерактивно вводимых команд, но для более сложных команд, которые пользователь мог написать в сценарии, он мог легко выйти из строя, выдав только загадочное сообщение об ошибке или нежелательный результат. Например, оболочка C не может поддерживать трубопровод между управляющими структурами. Попытка передать вывод для каждого командовать в grep просто не сработало. (Обход, который работает для многих жалоб, связанных с синтаксическим анализатором, состоит в том, чтобы разбить код на отдельные сценарии. Если для каждого перемещен в отдельный сценарий, конвейерная обработка работает, потому что сценарии запускаются путем создания новой копии csh, которая наследует правильные дескрипторы stdio.)

Другой пример - нежелательное поведение в следующих фрагментах. Оба из них, по-видимому, означают: «Если myfile не существует, создайте его, написав в нем mytext». Но версия справа всегда создает пустой файл, потому что порядок оценки оболочки C заключается в поиске и оценке операторов перенаправления ввода-вывода в каждой командной строке по мере ее чтения, прежде чем проверять остальную часть строки, чтобы увидеть, содержит ли она структура управления.

Реализация также подвергается критике за заведомо плохие сообщения об ошибках, например, «0 событие не найдено», что не дает полезной информации о проблеме.

Влияние

64-битный Оболочка Hamilton C на Windows 7 рабочий стол.

Оболочка C была чрезвычайно успешной в плане внедрения большого количества инноваций, включая история механизм, псевдонимы, обозначение тильды, интерактивное завершение имени файла, грамматика выражений, встроенная в оболочку, и многое другое, что с тех пор было скопировано другими оболочками Unix. Но в отличие от ш, который породил большое количество независимо разработанных клонов, в том числе кш и трепать, только два csh клоны известны. (С tcsh был основан на коде csh, первоначально написанном Биллом Джоем, и не считается клоном.)

В 1986 г. Аллен Голуб написал По команде: написание Unix-подобной оболочки для MS-DOS,[20] книга, описывающая написанную им программу под названием "SH", но на самом деле скопировавшую дизайн языка и особенности csh, а не sh. Сопутствующие дискеты, содержащие полный исходный код SH и базовый набор Unix-подобных утилит (cat, cp, grep и т. Д.), Были доступны у издателя за 25 и 30 долларов соответственно. Управляющие структуры, грамматика выражений, механизм истории и другие функции в SH Holub были идентичны таковым в оболочке C.

В 1988 году компания Hamilton Laboratories начала поставки. Оболочка Hamilton C за OS / 2.[21] Он включал в себя клон csh и набор утилит, подобных Unix. В 1992 году была выпущена оболочка Hamilton C для Windows NT.[22] Версия для Windows продолжает активно поддерживаться, но версия OS / 2 была прекращена в 2003 году.[22] Краткий справочник начала 1990 г.[23] описал намерение как "полное соответствие всему языку оболочки C (кроме контроль работы ) ", но с улучшениями в дизайне языка и адаптацией к различиям между Unix и ПК. Наиболее важным улучшением было нисходящий парсер это позволило управляющие структуры быть вложенными или передаваемыми по конвейеру, что исходная оболочка C не могла поддерживать, учитывая ее специальный синтаксический анализатор. Гамильтон также добавил новые языковые функции, включая встроенные и определяемые пользователем процедуры, блочные локальные переменные и арифметику с плавающей запятой. Адаптация к ПК включала поддержку имени файла и других соглашений на ПК, а также использование потоки вместо вилки (которые не были доступны ни в OS / 2, ни в Windows) для достижения параллелизм, например, при настройке конвейера.

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

Рекомендации

  1. ^ Зулас, Христос (24 ноября 2016 г.). "tcsh-6.20.00 уже доступен!". mx.gw.com. Архивировано из оригинал 25 ноября 2016 г.. Получено 24 ноября 2016.
  2. ^ Харли Хан, Руководство Харли Хана по Unix и Linux.
  3. ^ Заметки инженерной лаборатории Беркли, том 1, выпуск 2, октябрь 2001 г. В архиве 9 июля 2010 г. Wayback Machine.
  4. ^ Введение в оболочку C к Билл Джой.
  5. ^ Ubuntu - Подробная информация о пакете csh. Packages.ubuntu.com.
  6. ^ Debian - Подробная информация о пакете csh. Packages.debian.org.
  7. ^ Ubuntu - Подробная информация о пакете tcsh. Packages.ubuntu.com.
  8. ^ Debian - Подробная информация о пакете tcsh. Packages.debian.org.
  9. ^ Кен Грир (3 октября 1983 г.). "Оболочка C с распознаванием / завершением команд и имен файлов". Группа новостейnet.sources. Получено 29 декабря 2010.
  10. ^ tcsh (1) справочная страница. tcsh.
  11. ^ Файл исправлений в tcsh-17 июня 2000 г.
  12. ^ Re: Возвращение к поздним шароварам Сообщение USENET на comp.lang.misc Пьеркарло «Питер» Гранди, Департамент CS, UCW, Аберистуит, Великобритания, 17 декабря 1989 г.
  13. ^ Трой, Дуглас (1990). Системы UNIX. Основы вычислений. Бенджамин / Камминг Издательская компания. п. 25.
  14. ^ Борн, Стивен Р. (октябрь 1983 г.). "Оболочка Unix". БАЙТ. п. 187. Получено 30 января 2015.
  15. ^ Стандарт IEEE для информационных технологий, интерфейс переносимой операционной системы (POSIX), часть 2: оболочка и служебные программы, том 2. IEEE Std 1003.2-1992, стр. 766-767. ISBN  1-55937-255-9.
  16. ^ Csh-программирование считается вредным Том Кристиансен
  17. ^ Десять главных причин не использовать оболочку C Брюс Барнетт
  18. ^ Дэвид Грис (1971). Конструирование компиляторов для цифровых компьютеров. Джон Вили и сыновья. ISBN  0-471-32776-X.
  19. ^ Билл Джой в беседе с Брентом Шлендером, Клуб Черчилля, Санта-Клара, Калифорния, 11 февраля 2009 г. В архиве 30 марта 2010 г. Wayback Machine.
  20. ^ Голуб, Аллен (1986–1987). По команде: написание Unix-подобной оболочки для MS-DOS (Второе изд.). M&T Books, Редвуд-Сити, Калифорния. ISBN  0-934375-29-1.
  21. ^ Гамильтон, Дуглас. "Объявление о оболочке Hamilton C" (PDF). Разработчик персональных систем IBM (Лето 1989 г.): 119–121. Получено 11 июля 2020.
  22. ^ а б Гамильтон, Николь (5 марта 2017 г.). "Оболочка Hamilton C для Windows Release Notes 5.2.g". Hamilton Laboratories, Редмонд, Вашингтон. Получено 3 апреля 2018.
  23. ^ Краткое руководство по оболочке Hamilton C (PDF). Hamilton Laboratories, Вейланд, Массачусетс. 1988–1990. Получено 11 июля 2020.

дальнейшее чтение

внешняя ссылка