Интерфейс командной строки ( CLI ) — это средство взаимодействия с компьютерной программой посредством ввода строк текста, называемых командными строками . Интерфейсы командной строки появились в середине 1960-х годов на компьютерных терминалах как интерактивная и более удобная для пользователя альтернатива неинтерактивному интерфейсу, доступному с перфокартами .
Сегодня большинство пользователей компьютеров полагаются на графические пользовательские интерфейсы («GUI») вместо CLI. Однако многие программы и утилиты операционной системы не имеют GUI и предназначены для использования через CLI.
Знание CLI также полезно для написания скриптов . Программы, имеющие CLI, обычно легко автоматизировать с помощью скриптов, поскольку командные строки, являющиеся просто строками текста, легко указать в коде.
Интерфейсы командной строки стали возможны благодаря интерпретаторам командной строки или процессорам командной строки , которые представляют собой программы, считывающие командные строки и выполняющие команды.
Альтернативами CLI являются графические пользовательские интерфейсы (в первую очередь метафоры рабочего стола с указателем мыши , такие как Microsoft Windows ), текстовые меню пользовательского интерфейса (такие как DOS Shell и IBM AIX SMIT ) и сочетания клавиш .
По сравнению с графическим пользовательским интерфейсом, интерфейс командной строки требует меньше системных ресурсов для реализации. Поскольку параметры команд задаются несколькими символами в каждой командной строке, опытный пользователь часто находит параметры более простыми для доступа. Автоматизация повторяющихся задач упрощается за счет редактирования строк и механизмов истории для хранения часто используемых последовательностей; это может распространяться на язык сценариев , который может принимать параметры и переменные параметры. Можно сохранять историю командной строки, что позволяет просматривать или повторять команды.
Система командной строки может потребовать бумажные или онлайн-руководства для справки пользователя, хотя часто опция справки обеспечивает краткий обзор опций команды. Среда командной строки может не предоставлять графических улучшений, таких как различные шрифты или расширенные окна редактирования, имеющиеся в GUI. Новому пользователю может быть сложно ознакомиться со всеми доступными командами и опциями по сравнению со значками и раскрывающимися меню графического пользовательского интерфейса без обращения к руководствам.
Интерфейсы командной строки операционной системы (ОС) обычно представляют собой отдельные программы, поставляемые вместе с операционной системой. Программа, реализующая такой текстовый интерфейс, часто называется интерпретатором командной строки, командным процессором или оболочкой .
Примерами интерпретаторов командной строки являются Nushell , DEC's DIGITAL Command Language (DCL) в OpenVMS и RSX-11 , различные оболочки Unix ( sh , ksh , csh , tcsh , zsh , Bash и т. д.), CP/M 's CCP , DOS ' COMMAND.COM , а также программы OS/2 и Windows CMD.EXE , причем последние группы в значительной степени основаны на DEC's RSX-11 и RSTS CLI. В большинстве операционных систем можно заменить программу оболочки по умолчанию альтернативными; примерами служат 4DOS для DOS, 4OS2 для OS/2 и 4NT / Take Command для Windows.
Хотя термин «оболочка» часто используется для описания интерпретатора командной строки, строго говоря, «оболочкой» может быть любая программа, которая составляет пользовательский интерфейс, включая полностью графически ориентированные. Например, по умолчанию графический интерфейс Windows — это программа-оболочка с именем EXPLORER.EXE , как определено в строке SHELL=EXPLORER.EXE в файле конфигурации WIN.INI. Эти программы являются оболочками, но не CLI.
Прикладные программы (в отличие от операционных систем) также могут иметь интерфейсы командной строки.
Прикладная программа может не поддерживать ни одного, поддерживать любой или все из этих трех основных типов механизмов интерфейса командной строки:
Некоторые приложения поддерживают CLI, предоставляя пользователю собственное приглашение и принимая командные строки. Другие программы поддерживают как CLI, так и GUI. В некоторых случаях GUI — это просто оболочка вокруг отдельного исполняемого файла CLI . В других случаях программа может предоставлять CLI в качестве дополнительной альтернативы своему GUI. CLI и GUI часто поддерживают разную функциональность. Например, все функции MATLAB , компьютерной программы численного анализа , доступны через CLI, тогда как MATLAB GUI предоставляет только подмножество функций.
В игре Colossal Cave Adventure 1975 года пользователь использует CLI для ввода одного или двух слов, чтобы исследовать систему пещер.
Интерфейс командной строки развился из формы общения, осуществляемого людьми через телетайпные (TTY) машины. Иногда они включали отправку заказа или подтверждения с помощью телекса . Ранние компьютерные системы часто использовали телетайп как средство взаимодействия с оператором.
Механический телетайп был заменен «стеклянным tty» , клавиатурой и экраном, эмулирующими телетайп. «Умные» терминалы позволяли выполнять дополнительные функции, такие как перемещение курсора по всему экрану или локальное редактирование данных на терминале для передачи на компьютер. Поскольку революция микрокомпьютеров заменила традиционную архитектуру разделения времени — миникомпьютер + терминалы , аппаратные терминалы были заменены эмуляторами терминалов — программным обеспечением ПК, которое интерпретировало сигналы терминала, отправленные через последовательные порты ПК . Они обычно использовались для сопряжения новых ПК организации с их существующими мини- или мэйнфрейм-компьютерами или для соединения ПК с ПК. Некоторые из этих ПК работали под управлением программного обеспечения Bulletin Board System .
Ранние операционные системы CLI были реализованы как часть резидентных программ-мониторов и не могли быть легко заменены. Первая реализация оболочки как сменного компонента была частью операционной системы с разделением времени Multics . [1] В 1964 году сотрудник Вычислительного центра Массачусетского технологического института Луи Пузен разработал инструмент RUNCOM для выполнения командных скриптов, допуская при этом замену аргументов. [2] Пузен придумал термин «оболочка» для описания техники использования команд как языка программирования и написал статью о том, как реализовать эту идею в операционной системе Multics . [3] Пузен вернулся в родную Францию в 1965 году, и первая оболочка Multics была разработана Глендой Шредер . [2]
Первая оболочка Unix , оболочка V6 , была разработана Кеном Томпсоном в 1971 году в Bell Labs и была смоделирована по образцу оболочки Multics Шредера. [4] [5] Оболочка Bourne была представлена в 1977 году как замена оболочки V6. Хотя она используется как интерактивный интерпретатор команд, она также была задумана как язык сценариев и содержит большинство функций, которые обычно считаются необходимыми для создания структурированных программ. Оболочка Bourne привела к разработке KornShell ( ksh), оболочки Almquist (ash) и популярной оболочки Bourne-again (или Bash). [5]
Ранние микрокомпьютеры сами по себе были основаны на интерфейсе командной строки, таком как CP/M , DOS или AppleSoft BASIC . В 1980-х и 1990-х годах с появлением Apple Macintosh и Microsoft Windows на ПК интерфейс командной строки как основной пользовательский интерфейс был заменен графическим пользовательским интерфейсом . [6] Командная строка оставалась доступной в качестве альтернативного пользовательского интерфейса, часто используемого системными администраторами и другими продвинутыми пользователями для системного администрирования, компьютерного программирования и пакетной обработки .
В ноябре 2006 года Microsoft выпустила версию 1.0 Windows PowerShell (ранее под кодовым названием Monad ), которая объединила возможности традиционных оболочек Unix с их собственной объектно-ориентированной платформой .NET Framework . MinGW и Cygwin — это пакеты с открытым исходным кодом для Windows, предлагающие интерфейс командной строки, подобный Unix. Microsoft предоставляет реализацию ksh от MKS Inc. для оболочки MKS Korn для Windows через свой дополнительный модуль Services for UNIX .
С 2001 года операционная система Macintosh macOS основана на Unix-подобной операционной системе под названием Darwin . [7] На этих компьютерах пользователи могут получить доступ к Unix-подобному интерфейсу командной строки, запустив программу -эмулятор терминала под названием Terminal , которая находится в подпапке Utilities папки Applications, или удаленно войдя в систему с помощью ssh . Z shell является оболочкой по умолчанию для macOS; также предоставляются Bash, tcsh и KornShell . До macOS Catalina Bash был оболочкой по умолчанию.
CLI используется всякий раз, когда большой словарь команд или запросов в сочетании с широким (или произвольным) набором опций может быть введен быстрее в виде текста, чем с помощью чистого GUI. Это обычно происходит с командными оболочками операционных систем . CLI также используются системами с недостаточными ресурсами для поддержки графического пользовательского интерфейса. Некоторые системы компьютерных языков (такие как Python , [8] Forth , LISP , Rexx и многие диалекты BASIC ) предоставляют интерактивный режим командной строки, позволяющий быстро оценивать код.
CLI часто используются программистами и системными администраторами, в инженерной и научной среде, а также технически продвинутыми пользователями персональных компьютеров. CLI также популярны среди людей с нарушениями зрения, поскольку команды и ответы могут отображаться с помощью обновляемых дисплеев Брайля .
Общая схема интерфейса командной строки [9] [10] такова:
Запрос команды param1 param2 param3 … paramN
В этом формате разделителями между элементами командной строки являются пробельные символы , а разделителем конца строки является разделитель новой строки . Это широко используемое (но не универсальное) соглашение.
CLI в целом можно рассматривать как состоящий из синтаксиса и семантики . Синтаксис — это грамматика, которой должны следовать все команды. В случае операционных систем DOS и Unix каждая определяет свой собственный набор правил, которым должны следовать все команды. В случае встраиваемых систем каждый поставщик, такой как Nortel , Juniper Networks или Cisco Systems , определяет свой собственный набор правил. Эти правила также диктуют, как пользователь перемещается по системе команд. Семантика определяет , какие виды операций возможны, на каких видах данных эти операции могут быть выполнены и как грамматика представляет эти операции и данные — символическое значение в синтаксисе.
Два разных CLI могут совпадать либо по синтаксису, либо по семантике, но только в том случае, если они совпадают по обоим параметрам, их можно считать достаточно схожими, чтобы позволить пользователям использовать оба CLI без необходимости чему-либо учиться, а также чтобы обеспечить возможность повторного использования скриптов.
Простой CLI отобразит приглашение, примет командную строку, введенную пользователем, завершаемую нажатием клавиши Enter , затем выполнит указанную команду и предоставит текстовое отображение результатов или сообщений об ошибках. Расширенные CLI проверят, интерпретируют и расширят параметры командной строки перед выполнением указанной команды и, при необходимости, захватят или перенаправят ее вывод.
В отличие от кнопки или пункта меню в графическом интерфейсе, командная строка обычно самодокументируется, точно указывая, что пользователь хочет сделать. Кроме того, командные строки обычно включают в себя множество значений по умолчанию , которые можно изменить для настройки результатов. Полезные командные строки можно сохранить, назначив строку символов или псевдоним для представления полной команды, или несколько команд можно сгруппировать для выполнения более сложной последовательности — например, скомпилировать программу, установить ее и запустить — создав единую сущность, называемую процедурой команды или скриптом, который сам по себе может рассматриваться как команда. Эти преимущества означают, что пользователь должен разобраться со сложной командой или серией команд только один раз, потому что их можно сохранить для повторного использования.
Команды, передаваемые оболочке CLI, часто имеют одну из следующих форм:
где doSomething по сути является глаголом , how наречием ( например, следует ли выполнять команду подробно или тихо ) и toFiles объектом или объектами (обычно одним или несколькими файлами), на которые должна воздействовать команда. В третьем примере это оператор перенаправления , сообщающий интерпретатору командной строки о необходимости отправлять вывод команды не на его собственный стандартный вывод (экран), а в указанный файл. Это перезапишет файл. Использование перенаправит вывод и добавит его в файл. Другой оператор перенаправления — вертикальная черта ( ), которая создает конвейер , в котором вывод одной команды становится вводом для следующей команды. [14]>
>>
|
Можно изменить набор доступных команд, изменив пути, отображаемые в переменной среды PATH . В Unix команды также должны быть помечены как исполняемые файлы. Каталоги в переменной path просматриваются в том порядке, в котором они указаны. Изменяя порядок пути, можно запустить, например, \OS2\MDOS\E.EXE вместо \OS2\E.EXE, когда по умолчанию установлено наоборот. Переименование исполняемых файлов также работает: люди часто переименовывают свой любимый редактор, например, в EDIT.
Командная строка позволяет ограничить доступные команды, например, доступ к расширенным внутренним командам. Windows CMD.EXE делает это. Часто условно-бесплатные программы ограничивают диапазон команд, включая вывод команды «ваш администратор отключил запуск пакетных файлов» из приглашения. [ требуется пояснение ]
Некоторые CLI, например, в сетевых маршрутизаторах , имеют иерархию режимов с различным набором команд, поддерживаемых в каждом режиме. Набор команд сгруппирован по ассоциации с безопасностью, системой, интерфейсом и т. д. В этих системах пользователь может проходить через ряд подрежимов. Например, если CLI имеет два режима, называемых интерфейсом и системой , пользователь может использовать командный интерфейс для входа в режим интерфейса. На этом этапе команды из системного режима могут быть недоступны, пока пользователь не выйдет из режима интерфейса и не войдет в системный режим.
Командная строка (или просто приглашение ) — это последовательность (одного или нескольких) символов, используемых в интерфейсе командной строки для указания готовности принимать команды. Она буквально предлагает пользователю выполнить действие. Приглашение обычно заканчивается одним из символов $
, %
, #
, [15] [16] :
или >
[ -
17] и часто включает в себя другую информацию, такую как путь к текущему рабочему каталогу и имя хоста .
Во многих системах Unix и производных от них приглашение обычно заканчивается на или , если пользователь является обычным пользователем, и на , если пользователь является суперпользователем («root» в терминологии Unix).$
%
#
Конечные пользователи часто могут изменять подсказки. В зависимости от среды они могут включать цвета, специальные символы и другие элементы (например, переменные и функции для текущего времени, пользователя, номера оболочки или рабочего каталога), чтобы, например, сделать подсказку более информативной или визуально приятной, различать сеансы на разных машинах или указывать текущий уровень вложенности команд. В некоторых системах специальные токены в определении подсказки могут использоваться для вызова внешних программ интерпретатором командной строки при отображении подсказки.
В COMMAND.COM DOS и cmd.exe Windows NT пользователи могут изменять приглашение, выдавая PROMPT
команду или напрямую изменяя значение соответствующей %PROMPT%
переменной среды . По умолчанию в большинстве современных систем C:\>
стиль получается, например, с помощью PROMPT $P$G
. По умолчанию в старых системах DOS стиль C>
получается просто с помощью PROMPT
, хотя в некоторых системах это создает более новый C:\>
стиль, если только он не используется на дискетах A: или B:; в этих системах PROMPT $N$G
может использоваться для переопределения автоматического значения по умолчанию и явного переключения на старый стиль.
Во многих системах Unix есть $PS1
переменная (Prompt String 1), [18] хотя на приглашение могут влиять и другие переменные (в зависимости от используемой оболочки ). В оболочке Bash приглашение в форме:
[ время ] пользователь@хост: рабочий_каталог $
можно установить, выполнив команду
экспорт PS1 = '[\t] \u@\H: \W $'
В zsh переменная $RPROMPT
управляет необязательным приглашением в правой части дисплея. Это не настоящее приглашение, поскольку место ввода текста не меняется. Она используется для отображения информации на той же строке, что и приглашение, но выровненной по правому краю.
В RISC OS командная строка представляет собой *
символ, поэтому команды CLI (ОС) часто называют звездочными командами . [19] К тем же командам можно также получить доступ из других командных строк (например, из командной строки BBC BASIC ), поставив перед командой символ *
.
Аргумент или параметр командной строки — это элемент информации, предоставляемый программе при ее запуске. [20] Программа может иметь множество аргументов командной строки, которые идентифицируют источники или места назначения информации или изменяют работу программы.
Когда командный процессор активен, программа обычно вызывается путем ввода ее имени, за которым следуют аргументы командной строки (если таковые имеются). Например, в Unix и Unix-подобных средах пример аргумента командной строки:
файл rm.s
file.s
— это аргумент командной строки, который сообщает программе rm о необходимости удалить файл с именем file.s
.
Некоторые языки программирования, такие как C , C++ и Java , позволяют программе интерпретировать аргументы командной строки, обрабатывая их как строковые параметры в основной функции . [21] [22] Другие языки, такие как Python , предоставляют API (функциональность) операционной системы через sys
модуль , и в частности sys.argv
для аргументов командной строки .
В операционных системах типа Unix одиночный дефис, используемый вместо имени файла, представляет собой специальное значение, указывающее, что программа должна обрабатывать данные, поступающие со стандартного ввода, или отправлять данные на стандартный вывод .
Параметр командной строки или просто параметр (также известный как флаг или переключатель ) изменяет работу команды; эффект определяется программой команды. Параметры следуют за именем команды в командной строке, разделяясь пробелами. Пробел перед первым параметром не всегда требуется, например, Dir/?
и DIR /?
в DOS, которые имеют тот же эффект [17] , что и перечисление доступных параметров команды DIR, тогда как dir --help
(во многих версиях Unix) требуется , чтобы параметру предшествовал по крайней мере один пробел (и это чувствительно к регистру).
Формат опций сильно различается в зависимости от операционной системы. В большинстве случаев синтаксис является соглашением, а не требованием операционной системы; вся командная строка — это просто строка, переданная программе, которая может обработать ее любым способом, который захочет программист, при условии, что интерпретатор может определить, где заканчивается имя команды и начинаются ее аргументы и опции.
Несколько репрезентативных примеров параметров командной строки, все из которых относятся к перечислению файлов в каталоге, для иллюстрации некоторых соглашений:
В Multics параметры командной строки и ключевые слова подсистем могут быть сокращены. Эта идея, по-видимому, происходит из языка программирования PL/I с его сокращенными ключевыми словами (например, STRG для STRINGRANGE и DCL для DECLARE). Например, в подсистеме форума Multics параметр -long_subject может быть сокращен до -lgsj . Также часто команды Multics сокращаются, обычно в соответствии с начальными буквами слов, которые соединяются вместе с подчеркиваниями для формирования имен команд, например, использование did для delete_iacl_dir .
В некоторых других системах сокращения являются автоматическими, например, допускается использование достаточного количества первых символов имени команды для ее уникальной идентификации (например, SU
сокращение для SUPERUSER
), в то время как в других системах некоторые определенные сокращения могут быть запрограммированы заранее (например, MD
для MKDIR
в COMMAND.COM) или определены пользователем с помощью пакетных скриптов и псевдонимов (например, alias md mkdir
в tcsh ).
В DOS, OS/2 и Windows разные программы, вызываемые из COMMAND.COM или CMD.EXE (или внутренние их команды), могут использовать разный синтаксис в одной и той же операционной системе. Например:
/
, -
, или любой из них может быть разрешен. См. ниже.:
или =
; таким образом Prog -fFilename
, Prog -f Filename
, Prog -f:Filename
, Prog -f=Filename
, .-fA
может означать то же самое, что и -f -A
, [17] или может быть неверным, или даже может быть допустимым, но другим параметром.В DOS , OS/2 и Windows наиболее распространен прямой слеш ( /
), хотя иногда используется также дефис-минус. Во многих версиях DOS (MS-DOS/PC DOS 2.xx и выше, все версии DR-DOS с 5.0, а также PTS-DOS , Embedded DOS , FreeDOS и RxDOS ) используемый символ-переключатель (иногда сокращенно switchar или switchchar ) определяется значением, возвращаемым системным вызовом ( INT 21h /AX=3700h). Символ по умолчанию, возвращаемый этим API, — /
, но его можно изменить на дефис-минус в вышеупомянутых системах, за исключением Datalight ROM-DOS и MS-DOS/PC DOS 5.0 и выше, которые всегда возвращаются /
из этого вызова (если только не загружен один из многих доступных TSR для повторного включения функции SwitChar). В некоторых из этих систем (MS-DOS/PC DOS 2.xx, DOS Plus 2.1, DR-DOS 7.02 и выше, PTS-DOS, Embedded DOS, FreeDOS и RxDOS) настройку также можно предварительно настроить с помощью директивы SWITCHAR в CONFIG.SYS . Embedded DOS компании General Software предоставляет команду SWITCH для той же цели, тогда как 4DOS позволяет изменять настройку с помощью SETDOS /W:n
. [23] В DR-DOS, если настройка была изменена с /
, первый разделитель каталогов \
на дисплее параметра PROMPT изменится$G
на косую черту /
(которая также является допустимым разделителем каталогов в DOS, FlexOS, 4680 OS, 4690 OS, OS/2 и Windows), тем самым служа визуальной подсказкой для указания изменения. [17] Кроме того, текущая настройка также отражается на встроенных экранах справки. [17] Некоторые версии DR-DOS COMMAND.COM также поддерживают токен PROMPT $/
для отображения текущих настроек. COMMAND.COM, начиная с DR-DOS 7.02, также предоставляет псевдопеременную окружения, названную так, %/%
чтобы разрешить запись переносимых пакетных заданий. [24] [25] Несколько внешних команд DR-DOS дополнительно поддерживают переменную окружения %SWITCHAR%
для переопределения системных настроек.
Однако многие программы запрограммированы /
только на использование, а не на извлечение настройки переключателя перед разбором аргументов командной строки. Очень небольшое число, в основном порты из Unix-подобных систем, запрограммированы на принятие "-", даже если символ переключателя не установлен на него (например, netstat
и ping
, поставляемые с Microsoft Windows , будут принимать опцию /? для перечисления доступных опций, и все же список будет указывать соглашение "-").
В Unix-подобных системах параметры начинаются с дефиса ASCII -минуса ; новое (и GNU ) соглашение заключается в использовании двух дефисов, а затем слова (например, --create
), чтобы идентифицировать использование параметра, в то время как старое соглашение (и все еще доступное как параметр для часто используемых параметров) заключается в использовании одного дефиса, а затем одной буквы (например, -c
); если за одним дефисом следуют две или более букв, это может означать, что указаны два параметра, или это может означать, что вторая и последующие буквы являются параметром (например, именем файла или датой) для первого параметра. [26]
Два символа дефис-минус без последующих букв ( --
) могут указывать на то, что оставшиеся аргументы не следует рассматривать как параметры, что полезно, например, если имя файла начинается с дефиса или если дальнейшие аргументы предназначены для внутренней команды (например, sudo ). Двойные дефис-минус также иногда используются для префикса длинных параметров , где используются более описательные имена параметров. Это общая особенность программного обеспечения GNU . Функция и программа getopt , а также команда getopts обычно используются для анализа параметров командной строки.
Имена команд Unix, аргументы и параметры чувствительны к регистру (за исключением нескольких примеров, в основном тех, где популярные команды из других операционных систем были перенесены в Unix).
FlexOS , 4680 OS и 4690 OS используют -
.
Обычно используется CP/M[
.
Conversational Monitor System (CMS) использует одну левую скобку для отделения параметров в конце команды от других аргументов. Например, в следующей команде параметры указывают, что целевой файл должен быть заменен, если он существует, а дата и время исходного файла должны быть сохранены в копии:COPY source file a target file b (REPLACE OLDDATE)
CLI компании Data General в операционных системах RDOS , AOS и т. д., а также версия CLI, поставляемая с Business Basic , использует только /
символ переключения, нечувствительна к регистру и позволяет локальным переключателям в некоторых аргументах управлять способом их интерпретации, например, MAC/U LIB/S A B C $LPT/L
имеет глобальную опцию U
для команды макроассемблера для добавления пользовательских символов, но два локальных переключателя, один для указания того, что LIB следует пропустить на проходе 2, а другой для прямой выдачи на принтер, $LPT.
Одним из недостатков CLI является отсутствие подсказок пользователю относительно доступных действий. [ требуется цитата ] Напротив, графические интерфейсы обычно информируют пользователя о доступных действиях с помощью меню, иконок или других визуальных подсказок. [ требуется цитата ] Чтобы преодолеть это ограничение, многие программы CLI отображают сообщение об использовании , как правило, при вызове без аргументов или с одним из аргументов ?
, -?
, -h
, -H
, /?
, /h
, /H
, /Help
, -help
, или --help
. [17] [27] [28]
Однако ввод имени программы без параметров в надежде на то, что она отобразит справку по использованию, может быть опасен, поскольку программы и скрипты, для которых аргументы командной строки являются необязательными, будут выполняться без дополнительного уведомления.
Хотя желательно, по крайней мере, для параметра help, программы могут не поддерживать все символы начальных параметров, приведенные выше. В DOS, где символ параметра командной строки по умолчанию может быть изменен с /
на -
, программы могут запрашивать API SwitChar , чтобы определить текущую настройку. Таким образом, если программа не поддерживает их все, пользователю может потребоваться знать текущую настройку, даже чтобы иметь возможность надежно запросить помощь. Если SwitChar был изменен на -
и, следовательно, /
символ принимается как альтернативный разделитель пути также в командной строке DOS, программы могут неправильно интерпретировать параметры, такие как /h
или /H
как пути, а не параметры help. [17] Однако, если задан как первый или единственный параметр, большинство программ DOS по соглашению примут его как запрос на помощь независимо от текущей настройки SwitChar. [17] [23]
В некоторых случаях для программы можно выбрать разные уровни справки. Некоторые программы, поддерживающие это, позволяют задать уровень детализации в качестве необязательного аргумента для параметра справки (например /H:1
, /H:2
, и т. д.) или они дают только краткую справку по параметрам справки с вопросительным знаком и более длинный экран справки для других параметров справки. [29]
В зависимости от программы, дополнительная или более конкретная справка по принятым параметрам иногда доступна путем предоставления соответствующего параметра в качестве аргумента для параметра справки или наоборот (как в /H:W
или в /W:?
(предполагая /W
, что другой параметр поддерживается программой)). [30] [31] [28] [27] [29] [примечание 1]
Подобно параметру help, но гораздо реже, некоторые программы предоставляют дополнительную информацию о себе (например, режим, статус, версию, автора, лицензию или контактную информацию) при вызове с параметром about, например -!
, /!
, -about
, или --about
. [27]
Поскольку символы ?
и !
обычно также выполняют другие функции в командной строке, они могут быть доступны не во всех сценариях, поэтому они не должны быть единственными вариантами доступа к соответствующей справочной информации.
Если необходима более подробная справка, чем та, что предоставляется встроенной внутренней справкой программы, многие системы поддерживают специальную внешнюю команду " (или подобную), которая принимает имя команды в качестве параметра вызова и вызывает внешнюю справочную систему.help command
В семействе DR-DOS ввод /?
или /H
в приглашении COMMAND.COM вместо самой команды отобразит динамически сгенерированный список доступных внутренних команд; [17] 4DOS и NDOS поддерживают ту же функцию, вводя ?
в приглашении [23] (что также принимается более новыми версиями DR-DOS COMMAND.COM); внутренние команды могут быть индивидуально отключены или повторно включены с помощью SETDOS /I
. [23] В дополнение к этому, некоторые более новые версии DR-DOS COMMAND.COM также принимают ?%
команду для отображения списка доступных встроенных переменных псевдосреды . Помимо их назначения в качестве быстрой справочной справки, это может использоваться в пакетных заданиях для запроса возможностей базового процессора командной строки. [17]
Встроенная справка по использованию и страницы руководства обычно используют небольшой синтаксис для описания допустимой формы команды: [32] [33] [34] [примечание 2]
ping <hostname>
mkdir [-p] <dirname>
cp <source1> [source2…] <dest>
netstat {-t|-u}
Обратите внимание, что эти символы имеют иное значение, чем при прямом использовании в оболочке. Угловые скобки можно опускать, если путаница с именем параметра и буквальной строкой маловероятна.
Во многих областях вычислений, но особенно в командной строке, символ пробела может вызывать проблемы, поскольку он имеет две различные и несовместимые функции: как часть команды или параметра, или как разделитель параметров или имен . Неоднозначность можно предотвратить либо запретом встроенных пробелов в именах файлов и каталогов в первую очередь (например, заменой их подчеркиваниями _
), либо заключением имени со встроенными пробелами между символами кавычек или использованием символа escape перед пробелом, обычно обратной косой черты ( \
). Например
Long path/Long program name Parameter one Parameter two
…неоднозначно (является ли имя программы частью имени программы или двумя параметрами?); однако
Long_path/Long_program_name Parameter_one Parameter_two
…,LongPath/LongProgramName ParameterOne ParameterTwo
…,"Long path/Long program name" "Parameter one" "Parameter two"
…и
Long\ path/Long\ program\ name Parameter\ one Parameter\ two
…не являются двусмысленными. Операционные системы на базе Unix минимизируют использование встроенных пробелов, чтобы минимизировать необходимость в кавычках. В Microsoft Windows часто приходится использовать кавычки, поскольку встроенные пробелы (например, в именах каталогов) являются обычным явлением.
Хотя большинство пользователей думают об оболочке как об интерактивном интерпретаторе команд, на самом деле это язык программирования, в котором каждый оператор запускает команду. Поскольку он должен удовлетворять как интерактивным, так и программным аспектам выполнения команды, это странный язык, сформированный как историей, так и дизайном.
- Брайан В. Керниган и Роб Пайк [35]
Термин интерпретатор командной строки ( CLI ) применяется к компьютерным программам, предназначенным для интерпретации последовательности строк текста, которые могут быть введены пользователем, прочитаны из файла или другого вида потока данных . Контекст интерпретации обычно относится к данной операционной системе или языку программирования .
Интерпретаторы командной строки позволяют пользователям вводить различные команды очень эффективным (и часто лаконичным) способом. Это требует от пользователя знания названий команд и их параметров, а также синтаксиса интерпретируемого языка .
Механизм Unix #!и команда OS/2 EXTPROC облегчают передачу пакетных файлов внешним процессорам. Можно использовать эти механизмы для написания специальных командных процессоров для специальных целей и обработки внешних файлов данных, которые находятся в пакетных файлах.
Многие графические интерфейсы, такие как OS/2 Presentation Manager и ранние версии Microsoft Windows, используют командные строки для вызова вспомогательных программ для открытия документов и программ. Команды хранятся в графической оболочке [ необходимо разъяснение ] или в файлах, таких как реестр или файл OS/2 OS2USER.INI
.
Самые ранние компьютеры не поддерживали интерактивные устройства ввода/вывода, часто полагаясь на сенсорные переключатели и индикаторы для связи с оператором компьютера . Этого было достаточно для пакетных систем, которые запускали одну программу за раз, часто с программистом, выступающим в качестве оператора. Это также имело преимущество низких накладных расходов, поскольку индикаторы и переключатели можно было протестировать и настроить с помощью одной машинной инструкции. Позже была добавлена единая системная консоль , чтобы оператор мог общаться с системой.
Начиная с 1960-х годов взаимодействие пользователя с компьютерами осуществлялось в основном посредством интерфейсов командной строки, изначально на таких машинах, как Teletype Model 33 ASR, а затем на ранних компьютерных терминалах на базе ЭЛТ , таких как VT52 .
Все эти устройства были чисто текстовыми, без возможности отображения графики или изображений. [nb 3] Для бизнес- приложений использовались текстовые меню , но для более общего взаимодействия интерфейсом была командная строка.
Около 1964 года Луи Пузен представил концепцию и название shell в Multics , основываясь на более ранних, более простых возможностях Compatible Time-Sharing System (CTSS). [36] [ требуется лучший источник ]
С начала 1970-х годов операционная система Unix адаптировала концепцию мощной среды командной строки и ввела возможность перенаправлять вывод одной команды в качестве ввода для другой. Unix также имела возможность сохранять и повторно запускать строки команд в виде сценариев оболочки , которые действовали как пользовательские команды.
Командная строка также была основным интерфейсом для ранних домашних компьютеров, таких как Commodore PET , Apple II и BBC Micro — почти всегда в форме интерпретатора BASIC . Когда появились более мощные бизнес-ориентированные микрокомпьютеры с CP/M и более поздними компьютерами DOS , такими как IBM PC , командная строка начала заимствовать некоторые синтаксис и функции оболочек Unix, такие как подстановка и конвейеризация вывода.
Командная строка впервые была серьезно оспорена подходом PARC GUI , который использовался в Apple Lisa 1983 года и Apple Macintosh 1984 года . Несколько пользователей компьютеров использовали GUI, такие как GEOS и Windows 3.1 , но большинство пользователей IBM PC не заменяли свою оболочку COMMAND.COM на GUI до выхода Windows 95 в 1995 году. [37] [38]
В то время как большинство неопытных пользователей компьютеров теперь используют практически исключительно графический интерфейс, более продвинутые пользователи имеют доступ к мощным средам командной строки:
Большинство интерпретаторов командной строки поддерживают скрипты в той или иной степени. (В конце концов, они являются интерпретаторами интерпретируемого языка программирования , хотя во многих случаях язык уникален для конкретного интерпретатора командной строки.) Они будут интерпретировать скрипты (по-разному называемые скриптами оболочки или пакетными файлами ), написанные на языке , который они интерпретируют. Некоторые интерпретаторы командной строки также включают в себя интерпретаторы других языков, таких как REXX , в дополнение к своим собственным, что позволяет выполнять скрипты на этих языках непосредственно в самом интерпретаторе командной строки.
Наоборот, языки программирования сценариев , в частности те, которые имеют функцию eval (такие как REXX, Perl , Python , Ruby или Jython ), могут использоваться для реализации интерпретаторов командной строки и фильтров. Для некоторых операционных систем , в первую очередь DOS , такой интерпретатор команд обеспечивает более гибкий интерфейс командной строки, чем тот, который поставляется. В других случаях такой интерпретатор команд может представлять высоконастраиваемый пользовательский интерфейс, использующий пользовательский интерфейс и средства ввода/вывода языка.
Командная строка обеспечивает интерфейс между программами, а также пользователем. В этом смысле командная строка является альтернативой диалоговому окну . Редакторы и базы данных представляют командную строку, в которой могут работать альтернативные командные процессоры. С другой стороны, в командной строке могут быть опции, которые открывают диалоговое окно. Последняя версия «Take Command» имеет эту функцию. DBase использовала диалоговое окно для создания командных строк, которые можно было дополнительно редактировать перед использованием.
Такие программы, как BASIC, diskpart , Edlin и QBASIC, предоставляют интерфейсы командной строки, некоторые из которых используют системную оболочку. Basic смоделирован на основе интерфейса по умолчанию для 8-битных компьютеров Intel. Калькуляторы могут работать как интерфейсы командной строки или диалоговые интерфейсы.
Emacs предоставляет интерфейс командной строки в виде своего минибуфера. Команды и аргументы можно вводить с помощью стандартной поддержки редактирования текста Emacs, а вывод отображается в другом буфере.
Существует ряд игр в текстовом режиме, таких как Adventure или King's Quest 1-3 , которые полагались на ввод команд пользователем в нижней части экрана. Один управляет персонажем, вводя команды, такие как «получить кольцо» или «посмотреть». Программа возвращает текст, который описывает, как персонаж видит его, или заставляет действие происходить. Текстовое приключение «Автостопом по Галактике» , часть интерактивной фантастики, основанная на одноименной книге Дугласа Адама , представляет собой командную строку в стиле телетайпа.
Самым примечательным из этих интерфейсов является стандартный интерфейс потоков , который позволяет передавать вывод одной команды на ввод другой. Текстовые файлы также могут служить любой из этих целей. Это обеспечивает интерфейсы конвейеризации, фильтров и перенаправления. В Unix устройства также являются файлами , поэтому обычным типом файла для оболочки, используемой для stdin, stdout и stderr, является файл устройства tty .
Другой интерфейс командной строки позволяет программе оболочки запускать вспомогательные программы, либо для запуска документов, либо для запуска программы. Команда обрабатывается внутри оболочки, а затем передается другой программе для запуска документа. Графический интерфейс Windows и OS/2 в значительной степени полагается на командные строки, передаваемые другим программам — консольным или графическим, которые затем обычно обрабатывают командную строку, не представляя пользовательскую консоль.
Такие программы, как редактор OS/2 E и некоторые другие редакторы IBM , могут обрабатывать командные строки, обычно предназначенные для оболочки, при этом выводимые данные помещаются непосредственно в окно документа.
Поле ввода URL веб-браузера может использоваться в качестве командной строки. Его можно использовать для запуска веб-приложений , доступа к конфигурации браузера , а также для выполнения поиска. Google , который называют «командной строкой Интернета», выполнит поиск по домену, когда обнаружит параметры поиска в известном формате. [48] Эта функциональность присутствует независимо от того, запущен ли поиск из поля браузера или на веб-сайте Google.
Существуют библиотеки JavaScript , которые позволяют писать приложения командной строки в браузере как отдельные веб-приложения или как часть более крупного приложения. [49] Примером такого веб-сайта является интерфейс CLI для DuckDuckGo . [50] Существуют также веб- приложения SSH, которые позволяют предоставлять доступ к интерфейсу командной строки сервера из браузера.
Во многих видеоиграх для ПК есть интерфейс командной строки, часто называемый консолью. Обычно он используется разработчиками игр во время разработки и разработчиками модов для отладки, а также для читерства или пропуска частей игры.
??
подсказку отладки (а не только ?
обзор по умолчанию). Конкретные страницы справки можно выбрать через ?n
(где n
— номер страницы). Кроме того, справка по определенным командам может быть отображена путем указания имени команды после ?
, например ?D
вызовет справку по различным командам дампа (например, D
и т. д.). Некоторые из этих функций уже поддерживались DR DOS 3.41 SID86 и GEMSID.Идея наличия сменной "командной оболочки" вместо "монитора", тесно интегрированного с ядром ОС, как правило, приписывается Multics.
Оболочка имеет четыре различных командных приглашения, называемых PS1, P52, P53 и PS4. PS означает Prompt String.
[…] CPI /H […] CPI [@] [@] [/?|/Help[:topic]] [/!|/About] […] [?|&] […] /?, /Help Показать этот экран справки или конкретную справку по теме (+) […] /!, /About Показать экран информации «About» […] /Cpifile (+) Имя файла .CPI/.CP <EGA.CPI>; расширение: <.CPI>; CPI.EXE=StdIn […] /Report Имя файла отчета <'
'=StdOut>; расширение: <.RPT> […] /Style (+) Export <0>-6=BIN-raw/ROM/RAM/PSF0/1/SH/CHED; 7-12/13-18/19-24=ASM-hex/dec/bin/ip/il/p/l/mp/ml […] CPI /H:C […] Обзор использования параметров файла кодовой страницы: […] CPI /H:S […] Обзор параметров /Style: […] ?, & Режим онлайн-редактирования (запрашивает ввод дополнительных параметров) […]
[…] Поскольку
DR-DOS 7.03
DEBUG
все еще основан на старом SID86.EXE, я предлагаю запустить DEBUG 1.51 и войти в расширенную справочную систему с помощью ?? из приглашения отладки. Это даст вам восемь экранов, полных справки по синтаксису и функциям. Некоторые из этих функций также поддерживались более старыми выпусками. […]
?
и подробную справку по ??
.)Интерфейс командной строки (CLI) Cisco IOS является основным пользовательским интерфейсом…