stringtranslate.com

Интерфейс командной строки

Скриншот примера сеанса Bash в GNOME Terminal 3, Fedora 15
Снимок экрана Windows PowerShell 1.0, работающего в Windows Vista

Интерфейс командной строки ( CLI ) — это средство взаимодействия с компьютерной программой посредством ввода строк текста, называемых командными строками . Интерфейсы командной строки появились в середине 1960-х годов на компьютерных терминалах как интерактивная и более удобная для пользователя альтернатива неинтерактивному интерфейсу, доступному с перфокартами .

Сегодня большинство пользователей компьютеров полагаются на графические пользовательские интерфейсы («GUI») вместо CLI. Однако многие программы и утилиты операционной системы не имеют GUI и предназначены для использования через CLI.

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

Интерфейсы командной строки (CLI) стали возможны благодаря интерпретаторам командной строки или процессорам командной строки , которые представляют собой программы, считывающие командные строки и выполняющие команды.

Альтернативами CLI являются графические интерфейсы (в первую очередь метафоры рабочего стола с указателем мыши , такие как Microsoft Windows ), текстовые меню пользовательского интерфейса (такие как DOS Shell и IBM AIX SMIT ) и сочетания клавиш .

Сравнение с графическими пользовательскими интерфейсами

Графический пользовательский интерфейс с иконками и окнами ( рабочий стол GEM 1.1 )

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

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

Типы

Интерфейсы командной строки операционной системы

CommandShell от Apple Computer в A/UX 3.0.1

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

Примерами интерпретаторов командной строки являются 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.

Интерфейсы командной строки приложений

GUI GNU Octave с интерфейсом командной строки

Прикладные программы (в отличие от операционных систем) также могут иметь интерфейсы командной строки.

Прикладная программа может не поддерживать ни одного, поддерживать любой или все из этих трех основных типов механизмов интерфейса командной строки:

Некоторые приложения поддерживают 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]

Взаимодействие с оболочкой Bourne в Unix версии 7

Первая оболочка 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-подобный CLI. 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 также популярны среди людей с нарушениями зрения, поскольку команды и ответы могут отображаться с помощью обновляемых дисплеев Брайля .

Анатомия оболочки 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] .>>>|

CLI и защита ресурсов

Можно изменить набор доступных команд, изменив пути, которые отображаются в переменной среды PATH . В Unix команды также должны быть помечены как исполняемые файлы. Каталоги в переменной path просматриваются в том порядке, в котором они указаны. Изменив порядок пути, можно запустить, например, \OS2\MDOS\E.EXE вместо \OS2\E.EXE, когда по умолчанию установлено наоборот. Переименование исполняемых файлов также работает: люди часто переименовывают свой любимый редактор, например, в EDIT.

Командная строка позволяет ограничить доступные команды, например, доступ к расширенным внутренним командам. Windows CMD.EXE делает это. Часто условно-бесплатные программы ограничивают диапазон команд, включая вывод команды «ваш администратор отключил запуск пакетных файлов» из приглашения. [ требуется пояснение ]

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

Командная строка

Подсказка BBC Micro после включения или жесткого сброса

Командная строка (или просто приглашение ) — это последовательность (одного или нескольких) символов, используемых в интерфейсе командной строки для указания готовности принимать команды. Она буквально предлагает пользователю выполнить действие. Приглашение обычно заканчивается одним из символов $, %, #, [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 ), поставив перед командой символ *.

Аргументы

Командная строка MS-DOS, иллюстрирующая разбор на команду и аргументы

Аргумент или параметр командной строки — это элемент информации, предоставляемый программе при ее запуске [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, Windows, OS/2

В DOS, OS/2 и Windows разные программы, вызываемые из COMMAND.COM или CMD.EXE (или внутренние их команды), могут использовать разный синтаксис в одной и той же операционной системе. Например:

В 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-подобных системах

В системах типа 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 от RT-11SJ, отображаемый на VT100

Если необходима более подробная справка, чем та, что предоставляется встроенной внутренней справкой программы, многие системы поддерживают специальную внешнюю команду " (или подобную), которая принимает имя команды в качестве параметра вызова и вызывает внешнюю справочную систему.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]

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

Космический персонаж

Во многих областях вычислений, но особенно в командной строке, символ пробела может вызывать проблемы, поскольку он имеет две различные и несовместимые функции: как часть команды или параметра, или как разделитель параметров или имен . Неоднозначность можно предотвратить либо запретом встроенных пробелов в именах файлов и каталогов в первую очередь (например, заменой их подчеркиваниями _ ), либо заключением имени со встроенными пробелами между символами кавычек или использованием символа 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 часто приходится использовать кавычки, поскольку встроенные пробелы (например, в именах каталогов) являются обычным явлением.

Интерпретатор командной строки

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

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

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

Механизм Unix #!и команда OS/2 EXTPROC облегчают передачу пакетных файлов внешним процессорам. Можно использовать эти механизмы для написания специальных командных процессоров для специальных целей и обработки внешних файлов данных, которые находятся в пакетных файлах.

Многие графические интерфейсы, такие как OS/2 Presentation Manager и ранние версии Microsoft Windows, используют командные строки для вызова вспомогательных программ для открытия документов и программ. Команды хранятся в графической оболочке [ необходимо пояснение ] или в файлах, таких как реестр или файл OS/2 OS2USER.INI .

Ранняя история

Клавиатура телетайпа ASR модели 33 с устройством чтения перфоленты и перфоратором
Терминал DEC VT52

Самые ранние компьютеры не поддерживали интерактивные устройства ввода/вывода, часто полагаясь на сенсорные переключатели и индикаторы для связи с оператором компьютера . Этого было достаточно для пакетных систем, которые запускали одну программу за раз, часто с программистом, выступающим в качестве оператора. Это также имело преимущество низких накладных расходов, поскольку индикаторы и переключатели можно было протестировать и настроить с помощью одной машинной инструкции. Позже была добавлена ​​единая системная консоль , чтобы оператор мог общаться с системой.

Начиная с 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, которые позволяют предоставлять доступ к интерфейсу командной строки сервера из браузера.

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

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

Примечания

  1. ^ Примером может служить комплексная внутренняя справочная система команды DR-DOS 7.03 DEBUG , которую можно вызвать через ??подсказку отладки (а не только ?обзор по умолчанию). Конкретные страницы справки можно выбрать через ?n(где n— номер страницы). Кроме того, справка по определенным командам может быть отображена путем указания имени команды после ?, например ?Dвызовет справку по различным командам дампа (например, Dи т. д.). Некоторые из этих функций уже поддерживались DR DOS 3.41 SID86 и GEMSID.
  2. ^ Заметное различие в описании синтаксиса команд DOS -подобных операционных систем: в документации Windows Server 2003 R2 используются курсивные буквы для «информации, которую должен предоставить пользователь», а в документации Windows Server 2008 используются угловые скобки. Курсив не может отображаться внутренней командой help , тогда как с угловыми скобками проблем нет.
  3. ^ За исключением ASCII-арта .

Ссылки

  1. ^ "Unix Shells". Архивировано из оригинала 2007-11-08. Идея наличия сменной "командной оболочки" вместо "монитора", тесно интегрированного с ядром ОС, как правило, приписывается Multics.
  2. ^ ab "Происхождение ракушки". www.multicians.org . Архивировано из оригинала 2017-12-21 . Получено 2017-04-12 .
  3. ^ Метц, Кейд (2013-01-03). «Скажи бонжур давно потерянному французскому дяде Интернета». Wired . Получено 2017-07-31 .
  4. ^ Mazières, David (осень 2004 г.). "MULTICS - The First Seven Years". Advanced Operating Systems . Stanford Computer Science Department. Архивировано из оригинала 2014-11-23 . Получено 2017-08-01 .
  5. ^ ab Jones, M. (2011-12-06). "Эволюция оболочек в Linux". developerWorks . IBM . Архивировано из оригинала 2017-07-08 . Получено 2017-08-01 .
  6. ^ "История графического пользовательского интерфейса". KASS . Получено 2024-03-24 .
  7. ^ Сингх, Амит (2006-06-19). Внутреннее устройство Mac OS X: системный подход. Addison-Wesley Professional. ISBN 978-0-13-270226-3.
  8. ^ "1. Командная строка и среда". Документация Python . Получено 2024-08-05 .
  9. ^ "GNU BASH Reference". Архивировано из оригинала 2010-12-03 . Получено 2015-12-20 .
  10. ^ "Обзор командной оболочки Microsoft Windows". Архивировано из оригинала 2015-09-05 . Получено 2015-07-12 .
  11. ^ "Список встроенных команд оболочки". Справочник Linux . 2023-07-05 . Получено 2024-08-05 .
  12. ^ B, Jason. "Как задать переменную $PATH в Linux | Opensource.com". opensource.com . Получено 05.08.2024 .
  13. ^ JasonGerend (2023-02-03). "path". learn.microsoft.com . Получено 2024-08-05 .
  14. ^ "Изучение оболочки bash, второе издание [книга]". www.oreilly.com . Получено 2024-08-05 .
  15. ^ Руководство пользователя SID (PDF) . Цифровые исследования . 1978. 595-2549. Архивировано (PDF) из оригинала 2019-10-20 . Получено 06.02.2020 .(4+69 страниц)
  16. ^ SID-86 Руководство пользователя для CP/M-86 (2-е изд.). Digital Research . Август 1982 [март 1982]. SID86UG.WS4. Архивировано из оригинала 2019-10-20 . Получено 06.02.2020 .[1] (Примечание. Перепечатанная версия руководства Эммануэля Роша с добавленными командами Q, SR и Z.)
  17. ^ abcdefghijk Пол, Матиас Р. (30 июля 1997 г.). «СОВЕТЫ NWDOS – советы и подсказки для Novell DOS 7, с просмотром недокументированных подробностей, ошибок и обходных путей». МПДОСТИП . Выпуск 157 (на немецком языке) (3-е изд.). Архивировано из оригинала 10 сентября 2017 г. Проверено 6 сентября 2014 г.(Примечание. NWDOSTIP.TXT — это комплексная работа по Novell DOS 7 и OpenDOS 7.01 , включающая описание многих недокументированных функций и внутренних компонентов. Она является частью еще более обширной коллекции MPDOSTIP.ZIP автора, которая поддерживалась до 2001 года и распространялась на многих сайтах в то время. Приведенная ссылка указывает на более старую версию файла NWDOSTIP.TXT, преобразованную в HTML.)
  18. ^ Паркер, Стив (2011). "Глава 11: Выбор и использование оболочек". Shell Scripting: Expert Recipes for Linux, Bash and more. Программист программисту. Индианаполис, США: John Wiley & Sons . стр. 262. ISBN 978-111816632-1. Оболочка имеет четыре различных командных приглашения, называемых PS1, P52, P53 и PS4. PS означает Prompt String.
  19. ^ Руководство пользователя RISC OS 3 (PDF) . Acorn Computers Limited . 1992-03-01. стр. 125. Архивировано (PDF) из оригинала 2017-01-09 . Получено 2017-04-12 .
  20. ^ nguyen-dows (29.05.2024). "Аргументы командной строки Windows Terminal". learn.microsoft.com . Получено 05.08.2024 .
  21. ^ "Аргументы командной строки в C". www.w3schools.in . Получено 2024-08-05 .
  22. ^ "Аргументы командной строки в Java". GeeksforGeeks . 2016-08-16 . Получено 2024-08-05 .
  23. ^ abcd Brothers, Hardin; Rawson, Tom ; Conn, Rex C .; Paul, Matthias R.; Dye, Charles E.; Georgiev, Luchezar I. (2002-02-27). Онлайн-справка 4DOS 8.00 .
  24. ^ Пол, Маттиас Р. (1998-01-09). DELTREE.BAT R1.01 Расширенное удаление файлов и каталогов. Caldera, Inc. Архивировано из оригинала 2019-04-08 . Получено 2019-04-08 .
  25. ^ DR-DOS 7.03 WHATSNEW.TXT — Изменения с DR-DOS 7.02 на DR-DOS 7.03. Caldera, Inc. 1998-12-24. Архивировано из оригинала 2019-04-08 . Получено 2019-04-08 .
  26. ^ "Argument Syntax (The GNU C Library)". gnu.org . Архивировано из оригинала 2021-06-18 . Получено 2021-07-09 .
  27. ^ abc Paul, Matthias R. (2002-05-13). "[fd-dev] mkeyb". freedos-dev . Архивировано из оригинала 2018-09-10 . Получено 2018-09-10 . […] 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: […] ?, & Режим онлайн-редактирования (запрашивает ввод дополнительных параметров) […]
  28. ^ ab Paul, Matthias R. (2002-01-09). "SID86". Группа новостей : comp.os.cpm . Получено 2018-04-08 . […] Поскольку DR-DOS 7.03 DEBUG все еще основан на старом SID86.EXE, я предлагаю запустить DEBUG 1.51 и войти в расширенную справочную систему с помощью ?? из приглашения отладки. Это даст вам восемь экранов, полных справки по синтаксису и функциям. Некоторые из этих функций также поддерживались более старыми выпусками. […]
  29. ^ ab Paul, Matthias R.; Frinke, Axel C. (2006-01-16). FreeKEYB - Advanced international DOS keyboard and console driver (Руководство пользователя) (v7 предварительная редакция).
  30. ^ CCI Multiuser DOS 7.22 GOLD Онлайн-документация . Concurrent Controls, Inc. (CCI). 1997-02-10. HELP.HLP.(Примечание. Отладчик символических инструкций SID86 предоставляет краткий экран справки ?и подробную справку по ??.)
  31. ^ Пол, Маттиас Р. (1997-05-24) [1991]. "DRDOSTIP.TXT – Tips und Tricks für DR DOS 3.41 - 5.0". MPDOSTIP (на немецком языке) (47-е изд.). Архивировано из оригинала 2016-11-07 . Получено 2016-11-07 .
  32. ^ "The Open Group Base Specifications Issue 7, Chapter 12.1 Utility Argument Syntax". The Open Group . 2008. Архивировано из оригинала 2013-04-30 . Получено 2013-04-07 .man-pages(7) –  Руководство по соглашениям и разным терминам Linux (Примечание. Соглашения для описания команд в операционных системах типа Unix.)
  33. ^ "Обзор командной оболочки". Справка по продукту Windows Server 2003. Microsoft . 2005-01-21. Архивировано из оригинала 2012-07-12 . Получено 2013-04-07 .
  34. ^ "Command-Line Syntax Key". Библиотека TechNet Windows Server 2008 R2 . Microsoft . 2010-01-25. Архивировано из оригинала 2013-05-04 . Получено 2013-04-07 .
  35. ^ Керниган, Брайан В .; Пайк, Роб (1984). Среда программирования UNIX . Englewood Cliffs: Prentice-Hall . ISBN 0-13-937699-2.
  36. ^ Пузен, Луи. «Происхождение раковины». Multicians.org . Архивировано из оригинала 21.12.2017 . Получено 22.09.2013 .
  37. ^ "Вспоминая запуск Windows 95 15 лет спустя". 2010-08-24. Архивировано из оригинала 2015-02-18 . Получено 2015-02-18 .
  38. ^ "История Windows". windows.microsoft.com . Архивировано из оригинала 2015-03-01.
  39. ^ "Совместимость оболочки Windows POSIX". Архивировано из оригинала 2017-07-03 . Получено 2017-08-26 .
  40. ^ "master - platform/external/mksh - Git в Google". android.googlesource.com . Архивировано из оригинала 2016-01-21 . Получено 2018-03-18 .
  41. ^ "Android adb shell - ash или ksh?". stackoverflow.com . Архивировано из оригинала 2017-07-02 . Получено 2018-03-14 .
  42. ^ "Android sh source". GitHub . Архивировано из оригинала 2012-12-17.
  43. ^ "Исходный код Android toolbox". GitHub .
  44. ^ openharmony/third_party_toybox, OpenHarmony, 2021-10-14 , получено 2024-07-07
  45. ^ "调测 - Shell介绍 - 《华为鸿蒙操作系统(OpenHarmony) v1.0 开发者文档》 - 书栈网 · BookStack" . www.bookstack.cn . Проверено 7 июля 2024 г.
  46. ^ "Руководство по настройке основ конфигурации, Cisco IOS Release 15M&T". Cisco . 30.10.2013. Использование интерфейса командной строки. Архивировано из оригинала 18.11.2016 . Получено 28.11.2016 . Интерфейс командной строки (CLI) Cisco IOS является основным пользовательским интерфейсом…
  47. ^ "Обзор интерфейса командной строки". www.juniper.net . Архивировано из оригинала 2003-09-08 . Получено 2018-03-14 .
  48. ^ "Google strange goodness". Архивировано из оригинала 2014-03-04 . Получено 2014-02-27 .
  49. ^ "jQuery Terminal Emulator". Архивировано из оригинала 2021-04-20 . Получено 2021-04-20 .
  50. ^ "DuckDuckGo TTY". Архивировано из оригинала 2021-05-07 . Получено 2021-04-20 .

Внешние ссылки