Введение
Командная оболочка — это интерфейс командной строки для взаимодействия с операционной системой компьютера и управления ею.
A command shell is a command line interface to interact with and manipulate a computer's operating system.
Общие характеристики
ShellОбычная средаОбычно вызываетсяВнедренаНезависимость от платформыОбычная оболочка входа в системуОбычная оболочка для скриптовЛицензияДоступность исходного кодаПользовательский интерфейсПоддержка мышиПоддержка UnicodeПоддержка ISO 8601Перенаправление консолиПеренаправление потоковНастраиваемостьСкрипты запуска/завершения работыПакетные скриптыЖурналированиеДоступна как статически связанный, независимый исполняемый файлТомпсон shellUNIXsh1971UNIXUNIXТекстовый CLIОболочка Bourne, версия 19777th Ed. UNIXsh19777th Ed. UNIX, 7-е издание UNIXТекстовый CLIOболочка Bourne, текущая версияРазличные UNIXsh1977SunOS 5. x, FreeBSDSunOS 5. xТекстовый CLIPOSIX shellPOSIXsh1992POSIXТекстовый CLIНе указано (приведено в качестве примера)bash (v4)POSIXbash, sh1989GNU, Linux (по умолчанию для root), macOS 10.3–10.14GNU, Linux, Haiku, macOS 10.3–10.14Текстовый CLIcshPOSIXcsh1978SunOSТекстовый CLItcshPOSIXtcsh, csh1983FreeBSD (ранее по умолчанию для root), ранее Mac OS XТекстовый CLIОболочка Hamilton C shellWin32, OS/2csh1988 (версия OS/2 больше не поддерживается)Текстовый CLIScshPOSIXscsh1994ksh (ksh93t+)POSIXksh1983AIX, HP-UXOpenSolarisТекстовый CLIashPOSIXsh1989Minix, системы на базе BusyBoxNetBSD, Minix, системы на базе BusyBoxТекстовый CLI (для BusyBox, поддерживается редактирование командной строки, но не обработка строк)CCPCP/M, MP/M(CCP)1976 (1974)CP/M (без входа в систему), MP/MCP/M, MP/M (первоначально закрытый исходный код)Текстовый CLI (автоматически через) (только через внешнюю команду для обновления)COMMAND. COMDOSCOMMAND1980 (реализации сторонних разработчиков, не привязанные к конкретному поставщику DOS или версии, доступны)DOS, Windows 95, 98, SE, MEDOS, Windows 95, 98, SE, MEСпецифичная для поставщика, например, MS EULA или BSD/GPL (свободные клоны) (кроме OpenDOS, DR DOS, PTS/DOS и FreeDOS)Текстовый CLI (кроме DR DOS) (через или) (через параметры запуска и переменные среды, DR DOS также поддерживает команду пользовательского переключателя по умолчанию) (автоматически для основной оболочки или явно через , или параметры запуска) (через команду или параметры запуска)OS/2 CMD. EXEOS/2, eComStation, ArcaOSCMD1987OS/2, eComStation, ArcaOSOS/2, eComStation, ArcaOSТекстовый CLI (только через параметр запуска) (через команду или и параметры запуска)Windows CMD. EXEWin32CMD1993Windows NT, 2000, XP, Server 2003, VistaWindows NT, 2000, XP, Server 2003, VistaТекстовый CLI (для UTF-8, но аргументы программы все еще кодируются в локальной кодовой странице) (через реестр, параметры запуска и переменные среды) (автоматически через реестр или явно через параметр запуска) (через команду или и параметры запуска)4DOS, NDOSDOS, Windows 95, 98, SE, ME4DOS, NDOS1989 (1986)Текстовый CLI с расширениями TUI (всплывающие окна, система справки, внутренняя переменная, команда) (через , за исключением , , , , , , , команд и раскраски файлов/каталогов) (через / файл, параметры запуска, переменные среды, команда) (автоматически для основной оболочки и / а также / для любой оболочки или явно через , или параметры запуска) (через команду или и параметры запуска)4OS2OS/2, eComStation, ArcaOS4OS21992 (но поставляется с ArcaOS)Текстовый CLI (через файл, параметры запуска, переменные среды, команда) (автоматически через / а также / файлы или явно через опцию) (через команду или и параметры запуска)TCC (ранее 4NT)Win32TCC1993опциональноопциональноТекстовый CLI (Take Command: GUI) (мышь в консоли, всплывающие окна, система справки, внутренняя переменная, команда) (через реестр, / файл, параметры запуска, переменные среды, команда) (автоматически через реестр и / а также /, или явно через опцию запуска) (через команду или и параметры запуска)VMS DCLOpenVMSАвтоматически для процесса входа/интерактивного процесса1977?VMSVMSПроприетарная, поставляется с VMSTекстовый CLIPowerShell. NET,. NET FrameworkPowerShell2006Windows 10, 8, Server 2008, 7Windows 10, 8, Server 2008, 7Графический CLIrcPlan 9, POSIXrc1989Plan 9, Version 10 UnixPlan 9, Version 10 UnixТекстовый CLIBeanShellJava2005fishPOSIXfish2005GhostBSDТекстовый CLIIonRedox, Linuxion2015RedoxRedoxТекстовый CLI (не распространяется как автономный исполняемый файл, но может быть собран как таковой)ShellОбычная средаОбычно вызываетсяВнедренаНезависимость от платформыОбычная оболочка входа в системуОбычная оболочка для скриптовЛицензияДоступность исходного кодаПользовательский интерфейсПоддержка мышиПоддержка UnicodeПоддержка ISO 8601Перенаправление консолиПеренаправление потоковНастраиваемостьСкрипты запуска/завершения работыПакетные скриптыЖурналированиеДоступна как статически связанный, независимый исполняемый файл
Интерактивные функции
Имя команды оболочки, автозаполнениеПуть, автозаполнениеАргумент команды, автозаполнениеПодстановочные знаки, автозаполнениеИстория командОбязательный аргументПодсказкаАвтоматические предложенияЦветные списки каталоговВыделение текстаСинтаксическая подсветкаИстория каталогов, стек или аналогичные функцииНеявное изменение каталогаАвтокоррекцияИнтегрированная средаСниппетыПодсказка значенияМеню/опцииПодсказкаИндикатор прогрессаКонтекстная справкаКонструктор командШелль Томпсона?Шелль Борна версия 1977 года?Внешняя оболочка Bourne текущая версияВнешняя cshВнешняя tcshВнешняя оболочка Hamilton CВнешняя scsh?Внешняя ksh (ksh93t+)Внешняя pdkshВнешняя zshСтороннее расширениеВнешняя ashВнешняя CCPCOMMAND. COM (только в DR DOS через %$ON%, %$OFF%, %$HEADER%, %$FOOTER%) (только пошаговое выполнение с COMMAND /Y (через , и команды) (через функцию, и косвенно через комбинацию , , команд) (кроме команды для директив INI-файлов)4OS2?????? ?TCC (ранее 4NT) (через , , и команды) (через функцию, и косвенно через комбинацию , , команд)PowerShellИмя команды оболочки, автозаполнениеПуть, автозаполнениеАргумент команды, автозаполнениеПодстановочные знаки, автозаполнениеИстория командОбязательный аргументПодсказкаАвтоматические предложенияЦветные списки каталоговВыделение текстаСинтаксическая подсветкаИстория каталогов, стек или аналогичные функцииНеявное изменение каталогаАвтокоррекцияИнтегрированная средаСниппетыПодсказка значенияМеню/опцииПодсказкаИндикатор прогрессаКонтекстная справкаКонструктор команд
Фонное исполнение
Фоновое выполнение позволяет оболочке запускать команду без взаимодействия с пользователем в терминале, освобождая командную строку для выполнения других задач в оболочке. В POSIX-оболочках и других Unix-оболочках фоновое выполнение осуществляется с помощью символа & в конце команды. В PowerShell для этого можно использовать командлеты Start-Process или Start-Job.
Завершения
Функции завершения помогают пользователю вводить команды в командной строке, находя и предлагая подходящие слова для незавершенных команд. Завершение обычно вызывается нажатием клавиши завершения (часто клавиши Tab). Завершение имени команды – это подстановка имени команды. В большинстве оболочек команда может быть программой, находящейся в пути поиска (обычно $PATH), встроенной командой, функцией или псевдонимом. Завершение пути – это подстановка пути к файлу, относительного или абсолютного. Завершение по маске – это обобщение завершения пути, когда выражение соответствует любому количеству файлов, используя любой поддерживаемый синтаксис для сопоставления с файлами. Завершение переменной – это подстановка имени переменной (переменной окружения или переменной оболочки). Bash, zsh и fish поддерживают завершение для всех имен переменных. PowerShell предоставляет завершение для имен переменных окружения, имен переменных оболочки и – внутри пользовательских функций – имен параметров. Завершение аргументов команды – это подстановка аргументов конкретной команды. Существует два типа аргументов: именованные и позиционные. Именованные аргументы, часто называемые опциями, идентифицируются по имени или букве, предшествующей значению, в то время как позиционные аргументы состоят только из значения. Некоторые оболочки позволяют завершать имена аргументов, но немногие поддерживают завершение значений. Bash, zsh и fish предлагают завершение имени параметра через определение, внешнее по отношению к команде, хранящееся в отдельном файле определения завершения. Для завершения имени/значения параметра команды эти оболочки по умолчанию используют завершение пути/имени файла, если для команды не определено завершение. Завершение можно настроить для предложения вариантов, вызывая функцию оболочки. Оболочка fish дополнительно поддерживает разбор страниц руководства (man pages) для извлечения информации о параметрах, которая может быть использована для улучшения завершения/предложений. В PowerShell все типы команд (cmdlet, функции, файлы скриптов) изначально предоставляют данные об именах, типах и допустимых диапазонах/списках значений для каждого аргумента. PowerShell использует эти метаданные для автоматической поддержки завершения имени и значения аргументов для встроенных команд/функций, пользовательских команд/функций, а также для файлов скриптов. Отдельные cmdlet также могут определять динамическое завершение значений аргументов, когда значения завершения вычисляются динамически в работающей системе.
История команд
Пользователи оболочки могут заметить, что вводят что-то похожее на то, что вводили ранее. Поддержка истории команд позволяет пользователю извлечь предыдущую команду в редактор командной строки и отредактировать её перед выполнением, возможно, с изменениями. Оболочки с поддержкой автодополнения также могут напрямую дополнить команду из истории команд, основываясь на частичном или начальном фрагменте предыдущей команды. Большинство современных оболочек поддерживают историю команд. Оболочки, поддерживающие историю команд, как правило, также поддерживают автодополнение из истории, а не только извлечение команд из истории. Помимо самого текста команды, PowerShell также сохраняет время начала и окончания выполнения, а также статус выполнения в истории команд.
Обязательный аргумент
Обязательные аргументы/параметры – это аргументы/параметры, которым необходимо присвоить значение при вызове команды, функции или файла скрипта. Оболочка, способная определить до вызова, что отсутствуют обязательные значения, может помочь интерактивному пользователю, запрашивая эти значения вместо того, чтобы допускать сбой команды. Возможность запроса оболочкой отсутствующих значений позволяет автору скрипта, команды или функции объявлять параметр обязательным, вместо того чтобы создавать код скрипта для запроса отсутствующих значений (после определения, что скрипт выполняется в интерактивном режиме) или вывода сообщения об ошибке. PowerShell позволяет командам, функциям и скриптам определять аргументы/параметры как обязательные. Оболочка определяет до вызова, есть ли необязанные обязательные аргументы/параметры, и затем запрашивает у пользователя их значения перед фактическим вызовом.
mandatory arguments/parameters which have not been bound, and will then prompt the user for the value(s) before actual invocation.
Автоматические предложения
В оболочках с автоматическими подсказками отображаются необязательные варианты автодополнения командной строки по мере ввода пользователем. Оболочки PowerShell и fish поддерживают эту функцию нативно; нажатие клавиши Tab вставляет предложенное дополнение. Реализации этой функции могут различаться в разных оболочках: например, PowerShell и zsh используют внешний модуль для предоставления дополнений, а fish формирует свои предложения на основе истории команд пользователя.
История каталога, стек или аналогичные функции
Shell может записывать историю посещенных пользователем каталогов и обеспечивать быстрое переключение к любому из зафиксированных местоположений. Это называется "стеком каталогов". Эта концепция была реализована еще в 1978 году в выпуске оболочки C (csh). PowerShell позволяет использовать несколько именованных стеков. Местоположения (каталоги) можно добавлять в текущий стек или в именованный стек, а также удалять из них. Любой стек может стать текущим (по умолчанию). В отличие от большинства других оболочек, концепция местоположений в PowerShell позволяет стекам местоположений хранить не только пути файловой системы, но и другие типы местоположений, такие как, например, организационные подразделения/группы Active Directory, базы данных/таблицы/объекты SQL Server, приложения/сайты/виртуальные каталоги Internet Information Server. Интерпретаторы командной строки 4DOS и его графический преемник Take Command Console также поддерживают стек каталогов.
Неявная смена каталога
Имя каталога можно использовать непосредственно как команду, которая неявно переводит текущий каталог в указанный. Это следует отличать от отдельной функции загрузочного диска, поддерживаемой Concurrent DOS, Multiuser DOS, System Manager и REAL/32, где буква диска L: неявно обновляется для указания на путь загрузки запущенного приложения, позволяя приложениям обращаться к файлам, расположенным в их каталоге загрузки, через стандартизированную букву диска вместо абсолютного пути.
Автокоррекция
Когда командная строка не соответствует команде или аргументам, проверка орфографии может автоматически исправлять распространенные опечатки (например, ошибки в регистре, пропущенные буквы). Существует два подхода: оболочка может предлагать вероятные исправления при вводе команды, либо это может происходить раньше, в процессе автодополнения или автоподсказки. Оболочки tcsh и zsh имеют встроенную опциональную проверку и исправление орфографии при вызове команды. Fish выполняет автокоррекцию при автодополнении и автоподсказке. Таким образом, эта функция не мешает при полном наборе команды и нажатии Enter, в то время как активное использование клавиш Tab и стрелки вправо делает оболочку в основном нечувствительной к регистру. PSReadLine – это не встроенные функции оболочек. PowerShell имеет встроенные команды и функции API (для использования при создании команд) для создания и обновления индикатора прогресса. Сообщения индикатора прогресса отправляются отдельно от обычного вывода команды, и индикатор прогресса всегда отображается на консоли конечного пользователя, независимо от того, поступают ли сообщения о прогрессе из интерактивного скрипта, фоновой задачи или удаленной сессии.
and the progress bar is always displayed at the ultimate interactive users console regardless of whether the progress messages originates from an interactive script, from a background job or from a remote session.
Цветные списки каталогов
Процессоры командной строки JP Software позволяют пользователям настраивать раскраску имен файлов и каталогов в списках директорий в зависимости от их расширения и/или атрибутов с помощью необязательно определяемой переменной окружения. В Unix/Linux оболочках это функция команды и терминала.
Подсветка текста
Процессоры командной строки в DOS Plus, Multiuser DOS, REAL/32 и во всех версиях DR DOS поддерживают ряд дополнительных переменных среды для определения управляющих последовательностей, позволяющих контролировать выделение, инверсию или изменение цвета текста для отображения или печати в командах, таких как TYPE. Все упомянутые процессоры командной строки поддерживают %$ON% и %$OFF%. Если они определены, эти последовательности будут выводиться до и после имен файлов. Типичная последовательность для будет использоваться совместно с ANSI.SYS, для ASCII-терминала или для принтера IBM или ESC/P. Соответственно, типичными последовательностями для будут , , . Переменные %$HEADER% и %$FOOTER% поддерживаются только COMMAND.COM в DR DOS 7.02 и более поздних версиях для определения последовательностей, выводимых до и после текстовых блоков, чтобы управлять выделением текста, постраничным выводом или другими параметрами форматирования. Для оболочек Unix/Linux это функция терминала.
Контекстная помощь
4DOS, 4OS2, 4NT / Take Command Console и PowerShell (в PowerShell ISE) отображают контекстную справку при нажатии клавиши . Zsh предоставляет различные настраиваемые формы контекстной справки как часть своего виджета, команды или при автодополнении опций для некоторых команд. В оболочке fish при нажатии клавиши Tab отображаются краткие описания флагов команды.
Особенности программирования
Обработка исключений ShellFunctionsПоиск и замена в подстановках переменныхАрифметикаЧисла с плавающей точкойБиблиотека математических функцийЛинейные массивы или спискиАссоциативные массивыЛямбда-функцииФункция evalГенерация псевдослучайных чиселБайт-кодВерсия Bourne shell 1977Bourne shell текущая версияCCP???COMMAND. COM (только Auto fail (через (или в некоторых версиях DR DOS))OS/2 CMD. EXE? ?Windows CMD. EXE4DOS??4OS2???????? (функция)?TCC (ранее 4NT)??? (функция) (через команду)PowerShell (Try Catch Finally)rc???BeanShell?? ?VMS DCLfish
Обработка строки и сопоставление имен файлов
Обработка ShellString
Перебор вариантов (расширение скобками)
Сопоставление с образцом (встроенные регулярные выражения)
Сопоставление с образцом (глоббинг имен файлов)
Квалификаторы глоббинга (генерация имен файлов на основе атрибутов файлов)
Рекурсивный глоббинг (генерация файлов со всех уровней подкаталогов)
Bourne shell, версия 1977 года?
Bourne shell, последняя версия (удаление префиксов и суффиксов при раскрытии переменных)
POSIX shell (удаление префиксов и суффиксов при раскрытии переменных)
bash (v4.0) (удаление префиксов и суффиксов при раскрытии переменных)
csht
Hamilton C shell
Scsh? ?
ksh (ksh93t+) (удаление префиксов, суффиксов и замена строк при раскрытии переменных) (с , без перехода по символическим ссылкам)
pdksh?) (или для перехода по символическим ссылкам)
ash??
CCPCOMMAND.COM
OS/2 CMD.EXE (только в командном режиме)
Windows CMD.EXE (только через и) (только в команде) (через команду или, при наличии, косвенно через опцию subdir)
4DOS (через переменные функции , расширенную обработку переменных окружения, различные строковые команды и) (через атрибут и параметры описания и диапазоны исключения размера, времени, даты и файлов) (через команду или косвенно через команду или, при наличии, опцию subdir)
4OS2??? ?
TCC (ранее 4NT) (через переменные функции, расширенную обработку переменных окружения, различные строковые команды и) (через атрибут и параметры описания и диапазоны исключения размера, времени, даты, владельца и файлов) (через команду или косвенно через команду или, при наличии, опцию subdir)
PowerShell
Оператор диапазона для чисел
rc??
BeanShell???? ?
VMS DCL (через )
fish
Использовать разрешение
Некоторые операционные системы определяют разрешение на выполнение, которое может быть предоставлено пользователям или группам для файла, если это поддерживается файловой системой. В системах Unix разрешение на выполнение контролирует доступ к запуску файла как программы и применяется как к исполняемым файлам, так и к скриптам. Поскольку проверка этого разрешения осуществляется загрузчиком программы, ни вызывающая, ни вызываемая программа не обязаны самостоятельно проверять разрешение на выполнение – это относится и к оболочкам, и к другим интерпретаторам. Такое поведение предписано библиотекой POSIX C, используемой для взаимодействия с ядром. POSIX определяет, что семейство функций `exec` должно завершаться с ошибкой EACCESS (отказ в доступе), если файл не имеет разрешения на выполнение (см.). Разрешение на выполнение применяется только при прямом запуске скрипта. Если скрипт вызывается как аргумент интерпретирующей оболочки, он будет выполнен независимо от того, имеет ли пользователь разрешение на выполнение этого скрипта. Хотя Windows также определяет разрешение на выполнение, ни одна из специфичных для Windows оболочек не блокирует выполнение скрипта, если это разрешение не предоставлено.
Ограниченное подмножество оболочки
Несколько оболочек могут быть запущены или настроены для запуска в режиме, в котором пользователю доступен лишь ограниченный набор команд и действий. Хотя это и не является границей безопасности (блокируется команда, обращающаяся к ресурсу, а не сам ресурс), тем не менее, это обычно используется для ограничения действий пользователей до входа в систему. Ограниченный режим является частью спецификации POSIX для оболочек, и большинство оболочек Linux/Unix поддерживают такой режим, в котором некоторые встроенные команды отключены и разрешен запуск только внешних команд из определенного каталога. PowerShell поддерживает ограниченные режимы посредством файлов конфигурации сеансов или конфигураций сеансов. Файл конфигурации сеанса может определять видимые (доступные) командлеты, псевдонимы, функции, поставщики путей и многое другое.
Подмножество безопасных данных
Скрипты, вызывающие другие скрипты, могут представлять угрозу безопасности, поскольку они потенциально могут выполнять произвольный код в контексте пользователя, запустившего исходный скрипт. Обычно скрипты разрабатываются таким образом, чтобы включать только скрипты из известных безопасных источников, но в некоторых случаях, например, при предоставлении пользователю возможности настройки среды или загрузки локализованных сообщений, скрипту может потребоваться включать другие скрипты или файлы. Одним из способов снижения этого риска является предоставление оболочкой безопасного подмножества команд, которые могут быть выполнены включенным скриптом. Секции данных PowerShell могут содержать константы и выражения, использующие ограниченный набор операторов и команд. Секции данных PowerShell используются, например, когда необходимо читать локализованные строки из внешнего источника, защищаясь от нежелательных побочных эффектов.