Открыть сервис

C shell

C shell (csh) — это командная оболочка (интерпретатор команд) для операционных систем семейства Unix, разработанная Биллом Джоем в конце 1970-х годов. Отличается синтаксисом, напоминающим язык программирования C, и расширенными возможностями для интерактивной работы, такими как история команд, редактирование командной строки, псевдонимы (алиасы) и управление заданиями. Является одной из старейших и наиболее влиятельных оболочек Unix, наряду с Bourne shell (sh).

История

C shell была создана Биллом Джоем, одним из ключевых разработчиков операционной системы BSD Unix, во время его учёбы в Калифорнийском университете в Беркли. Первая версия была выпущена в 1978 году как часть 2BSD (Second Berkeley Software Distribution). Основной мотивацией для создания csh стало желание предоставить пользователям более удобный и мощный интерфейс командной строки по сравнению с существовавшей тогда оболочкой Bourne shell (sh), которая имела ограниченные возможности для интерактивной работы.

Джой заимствовал многие идеи из более ранней оболочки TENEX (TOPS-20), которая использовалась на мейнфреймах DEC PDP-10. Оттуда пришли такие функции, как история команд, редактирование строки и псевдонимы. Название «C shell» отражает синтаксис, который во многом напоминает язык программирования C (например, использование фигурных скобок для блоков и операторов управления, таких как if, while, switch).

В 1980-х годах csh стала стандартной оболочкой в системах BSD и получила широкое распространение в академической среде и среди разработчиков. Однако в конце 1980-х — начале 1990-х годов её популярность начала снижаться из-за появления более совершенных оболочек, в первую очередь tcsh (расширенная версия csh с улучшенным редактированием командной строки) и bash (Bourne Again SHell), которая сочетала синтаксис sh с функциями csh и tcsh. Несмотря на это, csh остаётся используемой в некоторых системах и для написания скриптов, хотя её применение в этой области считается устаревшим и не рекомендуется из-за ряда архитектурных недостатков.

Основные характеристики

Интерактивная работа

C shell была спроектирована в первую очередь как интерактивная оболочка. Её ключевые возможности для удобства пользователя включают:

  • История команд: Позволяет просматривать, повторять и редактировать ранее введённые команды. Команды нумеруются, и к ним можно обращаться по номеру (например, !123) или по частичному совпадению (например, !ls).
  • Псевдонимы (алиасы): Позволяют создавать сокращённые или заменяющие имена для длинных команд. Например, alias ll 'ls -la' создаёт команду ll, которая выполняет ls -la.
  • Редактирование командной строки: В оригинальной csh было ограниченным, но в её наследнике tcsh получило полноценную поддержку (перемещение курсора, удаление, вставка).
  • Управление заданиями: Позволяет запускать команды в фоновом режиме (с помощью символа &), приостанавливать их (Ctrl+Z), переводить на передний план (fg) или обратно в фон (bg).
  • Автодополнение: В tcsh и некоторых версиях csh поддерживается дополнение имён файлов и команд по нажатию клавиши Tab.

Синтаксис, подобный C

Синтаксис csh для написания скриптов и управления потоком выполнения заимствован из языка C:

  • Блоки кода заключаются в фигурные скобки { ... }.
  • Условные операторы: if (выражение) команда или if (выражение) then ... endif.
  • Циклы: foreach переменная (список) ... end и while (выражение) ... end.
  • Оператор выбора: switch (переменная) case значение: ... breaksw endsw.

Переменные

C shell использует два типа переменных:

  • Переменные оболочки: Управляют поведением самой оболочки (например, path, home, history). Устанавливаются командой set.
  • Переменные окружения: Передаются дочерним процессам. Устанавливаются командой setenv.

Пример: `` set myvar = "Hello" # переменная оболочки setenv PATH /usr/bin:/bin # переменная окружения ``

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

C shell поддерживает подстановку команд с помощью обратных кавычек (` `). Например: ` set files = ls ` Эта команда присваивает переменной files результат выполнения команды ls`.

Критика и недостатки

Несмотря на свою популярность в прошлом, C shell подвергается критике, особенно в контексте написания скриптов. Основные недостатки:

  • Несовместимость с POSIX: C shell не соответствует стандарту POSIX для командных оболочек, что делает скрипты на csh непереносимыми между различными Unix-системами.
  • Проблемы с обработкой ошибок: В csh отсутствует надёжный механизм обработки ошибок. Например, команда exit в скрипте может не сработать, если она вызвана внутри цикла или условного блока.
  • Сложность синтаксиса: Некоторые конструкции, такие как подстановка команд и работа с массивами, реализованы неинтуитивно и подвержены ошибкам.
  • Отсутствие функций: В оригинальной csh нет поддержки пользовательских функций, что затрудняет модульное программирование.
  • Проблемы с производительностью: Интерпретатор csh может работать медленнее, чем bash или sh, особенно при выполнении сложных скриптов.

Из-за этих недостатков многие руководства по Unix и Linux (например, Linux Standard Base) настоятельно рекомендуют использовать для написания скриптов оболочки, совместимые с POSIX (sh, bash, ksh), а не csh.

Разновидности и наследники

tcsh (Tenex C shell)

tcsh — это расширенная версия C shell, созданная в 1981 году Кеном Гриром (Ken Greer) в Университете Карнеги-Меллон. Она добавила полноценное редактирование командной строки, автодополнение по Tab, улучшенную историю команд и множество других удобств. tcsh полностью обратно совместима с csh и на многих системах (например, FreeBSD) является синонимом csh. tcsh остаётся популярной среди пользователей, ценящих интерактивные возможности.

Другие оболочки, испытавшие влияние csh

  • bash: Заимствовал у csh историю команд, псевдонимы и управление заданиями, но использует синтаксис sh для скриптов.
  • zsh: Также включает многие интерактивные возможности, впервые реализованные в csh.

Применение

В настоящее время C shell (как csh, так и tcsh) используется в следующих случаях:

  • Интерактивная работа: Некоторые опытные пользователи Unix и BSD предпочитают tcsh за его удобство в повседневной работе.
  • Системное администрирование: В некоторых старых системах или в средах, где csh является оболочкой по умолчанию (например, в некоторых версиях FreeBSD).
  • Написание простых скриптов: Хотя это не рекомендуется, csh иногда используется для быстрых однострочных скриптов или в учебных целях.
  • Наследие: Множество старых скриптов и конфигурационных файлов (например, .cshrc) всё ещё существуют в корпоративных и академических средах.

Интересные факты

  • Название «C shell» иногда ошибочно расшифровывают как «C Shell», но на самом деле это просто «си-шелл», отражающее синтаксис.
  • Билл Джой, создатель csh, также известен как сооснователь компании Sun Microsystems и один из разработчиков языка Java.
  • В некоторых операционных системах (например, в macOS до версии 10.15 Catalina) csh/tcsh использовалась как оболочка для пользователя root по умолчанию.
  • Команда rehash в csh используется для перестроения хеша команд после изменения переменной path, что ускоряет поиск исполняемых файлов.

Источники

  • Bill Joy. «An Introduction to the C shell». University of California, Berkeley, 1978.
  • Ken Greer. «tcsh: An extended C shell». Carnegie Mellon University, 1981.
  • «UNIX Shells: A Brief History». Linux Journal, 2003.
  • «C shell — Wikipedia, the free encyclopedia».
  • «tcsh — Wikipedia, the free encyclopedia».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →