Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Оболочка C, работающая в службах Windows для UNIX

Оболочка C ( CSH или улучшенная версия, Tcsh ) является Unix оболочки , созданный Билл Джой , когда он был аспирантом в Университете Калифорнии, Беркли , в конце 1970 - х годов. Он получил широкое распространение, начиная с 2BSD-релиза Berkeley Software Distribution (BSD), который Joy впервые распространил в 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 добавлены концепции завершения имени файла и команд и редактирования командной строки, заимствованные из системы Tenex , которая является источником символа «t». [9] Поскольку tcsh только добавлял функциональные возможности и не менял того, что там было, он оставался обратно совместимым [10] с исходной оболочкой C. Хотя он начинался как побочная ветка от исходного дерева исходных текстов, созданного Джой, теперь tcsh является основной ветвью для продолжающейся разработки. tcsh очень стабилен, но новые выпуски продолжают появляться примерно раз в год, в основном состоящие из мелких исправлений ошибок. [11]

Цели и особенности дизайна [ править ]

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

Больше похоже на C [ править ]

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

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

Оболочка Борна

#! / bin / sh if  [  $ days -gt 365  ] then  echo Это больше года.фи

Оболочка C

#! / bin / csh if  (  $ days > 365 )  then echo Это больше года.endif 

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

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

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

Оболочка Борна

#! / бен / ш я = 2 J = 1 , а  [  $ J -le 10  ] делать  эхо  "2 **  $ J  =  $ я    я = ` выражение $ я  '*'  2 '  J = ` выражение $ J + 1 ` готово

Оболочка C

#! / bin / csh set i  = 2 set j  = 1 while  (  $ j < = 10 )  echo  '2 **'  $ j  =  $ i @ i * = 2 @ j ++конец

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

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

Оболочка Борна

#! / bin / sh for i in d * do  case  $ i  in d? )  echo  $ i короткий ;;  * )  echo  $ i long ;;  esac сделано

Оболочка C

#! / bin / csh foreach i ( d * )  switch  (  $ i  )  case d ?: echo  $ i короткий breaksw по  умолчанию : echo  $ i длинный endw end

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

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

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

История [ править ]

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

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

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

Псевдонимы [ править ]

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

Стек каталогов [ править ]

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

Обозначение тильды [ править ]

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

Завершение имени файла [ править ]

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

Cdpath [ править ]

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

Управление заданиями [ править ]

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

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

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

Обзор языка [ править ]

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

Основные утверждения [ править ]

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

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

Подстановочные знаки [ править ]

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

  • * соответствует любому количеству символов.
  • ? соответствует любому одиночному символу.
  • [... ]соответствует любому из символов в квадратных скобках. Допускаются диапазоны с использованием дефиса.
  • [^... ]соответствует любому символу не в наборе.

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

  • abc{def,ghi}представляет собой чередование (также известное как расширение скобок ) и расширяется до abcdef abcghi .
  • ~ означает домашний каталог текущего пользователя.
  • ~userсредства пользователя» домашний каталог.

*/*.cПоддерживаются несколько подстановочных знаков уровня каталога, например " ".

Начиная с версии 6.17.01, с опцией также поддерживается рекурсивный подстановочный знак à la zsh (например, " **/*.c" или " ***/*.html") globstar.

Предоставление оболочке ответственности за интерпретацию подстановочных знаков было важным решением для Unix. Это означало, что подстановочные знаки будут работать с каждой командой и всегда одинаково. Однако это решение основывалось на способности Unix эффективно передавать длинные списки аргументов через системный вызов exec, который csh использует для выполнения команд. Напротив, в Windows интерпретация подстановочных знаков обычно выполняется каждым приложением. Это наследие MS-DOS, которое позволяло передавать приложению только 128-байтовую командную строку, что делало использование подстановочных знаков в командной строке DOS непрактичным. Хотя современная Windows может передавать командные строки до 32K Unicode символов, бремя интерпретации подстановочных знаков остается на приложении.

Перенаправление ввода / вывода [ править ]

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

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

Присоединение [ править ]

Команды можно объединять в одной строке.

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

Трубопровод [ править ]

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

  • |означает подключение стандартного вывода к стандартному вводу следующей команды. Ошибки по-прежнему приходят в окно оболочки.
  • |& означает подключение как stdout, так и stderr к stdin следующей команды.

Выполнение одновременно означает «параллельно». В многоядерной (многопроцессорной) системе переданные по конвейеру команды могут выполняться буквально одновременно, в противном случае планировщик в операционной системе разделяет их по времени.

По команде, например " a | b", оболочка создает канал , а затем запускает оба aи bсо стандартным вводом для двух перенаправленных команд так, что aзаписывает свой стандартный вывод во вход канала, а bчитает стандартный ввод из вывода канала. Каналы реализуются операционной системой с определенной степенью буферизации, чтобы aможно было писать в течение некоторого времени, прежде чем канал заполнится, но после заполнения канала любая новая запись будет блокироваться внутри ОС до тех пор, пока не будет bпрочитано достаточно, чтобы разблокировать новые записи. Если bпытается прочитать больше данных, чем доступно, он будет блокироваться до aтех пор, пока не будет записано больше данных или пока канал не закроется, например, при aвыходе.

Подстановка переменных [ править ]

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

Цитирование и экранирование [ править ]

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

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

Подстановка команд [ править ]

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

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

Выполнение в фоновом режиме [ править ]

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

  • Команда & означает запуск команды в фоновом режиме и немедленный запрос новой команды.

Subshells [ править ]

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

  • ( команды ) означают запуск команд в подоболочке.

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

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

оператор if [ править ]

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

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

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

if  ( выражение1 )  then  команды else if  ( выражение2 )  then  команды ...иначе  команды endif

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

оператор переключения [ править ]

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

переключатель  ( строка )  case pattern1: команды breaksw  case pattern2: команды ломается ... по умолчанию : команды breaksw endsw

оператор while [ править ]

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

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

оператор foreach [ править ]

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

переменная цикла foreach ( список значений ) командыконец

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

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

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

Переменные [ править ]

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

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

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

Выражения [ править ]

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

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

// C группы из левого Int  я  =  10  /  5  *  2 ; printf (  "% d \ n " ,  я  );  // выводит 4 i  =  7  -  4  +  2 ; printf (  "% d \ n " ,  я  );  // выводит 5 i  =  2  >>  1  <<  4 ; printf (  "% d \ n " ,  я  );  // выводит 16
# Группы оболочки C справа
@ i  = 10/5 * 2 echo  $ i  # выводит 1
@ i  = 7-4 + 2 echo  $ i  # выводит 1
@ i  =  ( 2 >> 1 << 4 ) echo  $ i  # отпечатков 0

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

Прием [ править ]

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

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

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

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

# Работает должным образом, если  (  ! -E myfile )  then  echo mytext> myfileendif
# Всегда создает пустой файл, если  ( ! -E myfile )  echo mytext> myfile
# Обходной путь, если  ( ! -E myfile )  eval  "echo mytext> myfile"

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

Влияние [ править ]

64-битная оболочка Hamilton C на рабочем столе Windows 7 .

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

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

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

См. Также [ править ]

  • Интерпретатор командной строки
  • Сравнение командных оболочек

Ссылки [ править ]

  1. ^ Zoulas, Christos (24 ноября 2016). "tcsh-6.20.00 уже доступен!" . mx.gw.com . Архивировано из оригинального 25 ноября 2016 года . Проверено 24 ноября +2016 .
  2. ^ Харли Хан, Руководство Харли Хана по Unix и Linux .
  3. ^ Berkeley Engineering Lab Notes, том 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: Late Bloomers Revisited USENET post на comp.lang.misc Пьеркарло «Питер» Гранди, Департамент CS, UCW, Аберистуит, Великобритания, 17 декабря 1989 г.
  13. ^ Трой, Дуглас (1990). Системы UNIX . Основы вычислений. Бенджамин / Камминг Издательская компания. п. 25.
  14. Перейти ↑ Bourne, Stephen R. (октябрь 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. ^ Билл Джой в разговоре с Brent Schlender, Churchill Club, Санта - Клара, Калифорния, 11 фев 2009 архивации 30 марта 2010 года на Wayback Machine .
  20. Голуб, Аллен (1986–1987). По команде: написание Unix-подобной оболочки для MS-DOS (второе изд.). Книги M&T, Редвуд-Сити, Калифорния. ISBN 0-934375-29-1.
  21. ^ Гамильтон, Дуглас. "Объявление о оболочке Hamilton C" (PDF) . IBM Personal Systems Developer (лето 1989 г.): 119–121 . Проверено 11 июля 2020 .
  22. ^ a b Гамильтон, Николь (5 марта 2017 г.). «Оболочка Hamilton C для Windows Release Notes 5.2.g» . Hamilton Laboratories, Редмонд, Вашингтон . Проверено 3 апреля 2018 .
  23. ^ Краткий справочник по оболочке Hamilton C (PDF) . Лаборатории Гамильтона, Вейланд, Массачусетс. 1988–1990 гг . Проверено 11 июля 2020 .

Дальнейшее чтение [ править ]

  • Андерсон, Гейл; Пол Андерсон (1986). UNIX C Руководство поле Shell . Прентис-Холл. ISBN 0-13-937468-X.
  • Ван, Пол (1988). Введение в Berkeley UNIX . Паб Уодсворт. Co. ISBN 0-534-08862-7.
  • Дюбуа, Поль (1995). Использование csh & tcsh . O'Reilly & Associates. ISBN 1-56592-132-1.
  • Арик, Мартин Р. (1993). UNIX C Shell Desk Reference . Джон Вили и сыновья. ISBN 0-471-55680-7.
  • «Введение в программирование оболочки C» . Кафедра компьютерных наук Canisius College . Проверено 23 июня 2010 года .

Внешние ссылки [ править ]

  • Введение в оболочке C по Уильяму Джой .
  • Linux в двух словах: Глава 8. csh и tcsh .
  • домашняя страница tcsh.
  • tcsh (1) справочная страница.
  • самый последний доступный исходный код tcsh.
  • исторический исходный код 2BSD csh от 2 февраля 1980 г.
  • Дерево Unix , полные исторические дистрибутивы Unix.
  • Программирование на Csh считается вредным.
  • Десять главных причин не использовать оболочку C.