Командная оболочка — это интерфейс командной строки для взаимодействия с операционной системой компьютера и управления ею .
Фоновое выполнение позволяет оболочке запускать команду без взаимодействия с пользователем в терминале, освобождая командную строку для дополнительной работы с оболочкой. Оболочки POSIX и другие оболочки Unix допускают фоновое выполнение с помощью символа & в конце команды. В PowerShell можно использовать командлеты [ Start-Process
43] или Start-Job
[44] .
Функции завершения помогают пользователю вводить команды в командной строке, ища и предлагая соответствующие слова для неполных. Завершение обычно запрашивается нажатием клавиши завершения (часто клавиши Tab ↹).
Дополнение имени команды — это завершение имени команды. В большинстве оболочек команда может быть программой в пути к команде (обычно $PATH
), встроенной командой, функцией или псевдонимом.
Завершение пути — это завершение пути к файлу, относительного или абсолютного.
Подстановочное дополнение представляет собой обобщение подстановочного дополнения пути, при котором выражение соответствует любому количеству файлов, используя любой поддерживаемый синтаксис для сопоставления файлов.
Автодополнение переменной — это автодополнение имени переменной ( переменной среды или переменной оболочки). Bash, zsh и fish имеют автодополнение для всех имен переменных. PowerShell имеет автодополнение для имен переменных среды, имен переменных оболочки и — из пользовательских функций — имен параметров.
Дополнение аргумента команды — это завершение аргументов конкретной команды. Существует два типа аргументов: именованные и позиционные: именованные аргументы, часто называемые опциями , идентифицируются по имени или букве, предшествующей значению, тогда как позиционные аргументы состоят только из значения. Некоторые оболочки позволяют дополнять имена аргументов, но немногие поддерживают завершение значений.
Bash, zsh и fish предлагают автодополнение имени параметра через определение, внешнее по отношению к команде, распределенное в отдельном файле определения автодополнения. Для автодополнения имени/значения параметра команды эти оболочки предполагают автодополнение пути/имени файла, если для команды автодополнение не определено. Автодополнение можно настроить для предложения автодополнений путем вызова функции оболочки. [45] Оболочка fish дополнительно поддерживает синтаксический анализ страниц man для извлечения информации о параметрах, которая может использоваться для улучшения автодополнений/предложений. В PowerShell все типы команд (командлеты, функции, файлы сценариев) по своей сути предоставляют данные об именах, типах и допустимых диапазонах/списках значений для каждого аргумента. Эти метаданные используются PowerShell для автоматической поддержки автодополнения имени и значения аргумента для встроенных команд/функций, пользовательских команд/функций, а также для файлов сценариев. Отдельные командлеты также могут определять динамическое автодополнение значений аргументов, где значения автодополнения вычисляются динамически в работающей системе.
Пользователи оболочки могут обнаружить, что печатают что-то похожее на то, что они печатали раньше. Поддержка истории команд означает, что пользователь может вызвать предыдущую команду в редакторе командной строки и отредактировать ее перед тем, как вводить потенциально измененную команду.
Оболочки, поддерживающие завершение, также могут напрямую завершать команду из истории команд, имея частичную/начальную часть предыдущей команды.
Большинство современных оболочек поддерживают историю команд. Оболочки, которые поддерживают историю команд в целом, также поддерживают завершение из истории, а не просто вызов команд из истории. В дополнение к простому тексту команды PowerShell также записывает время начала и окончания выполнения и статус выполнения в историю команд.
Обязательные аргументы/параметры — это аргументы/параметры, которым должно быть присвоено значение при вызове команды, функции или файла скрипта. Оболочка, которая может определить перед вызовом, что отсутствуют обязательные значения, может помочь интерактивному пользователю, запросив эти значения вместо того, чтобы позволить команде завершиться сбоем. Наличие запроса оболочки для отсутствующих значений позволит автору скрипта, команды или функции пометить параметр как обязательный вместо создания кода скрипта, который либо запросит отсутствующие значения (после определения того, что он выполняется интерактивно), либо выдаст сообщение об ошибке.
PowerShell позволяет командам, функциям и скриптам определять аргументы/параметры как обязательные . Оболочка определяет перед вызовом, есть ли какие-либо обязательные аргументы/параметры, которые не были привязаны, и затем запрашивает у пользователя значение(я) перед фактическим вызовом. [46]
Оболочки с автоматическими предложениями отображают необязательные дополнения командной строки по мере ввода текста пользователем. Оболочки PowerShell и fish изначально поддерживают эту функцию; нажатие клавиши вставляет дополнения.Tab ↹
Реализации этой функции могут различаться в разных оболочках; например, PowerShell [47] и zsh [48] используют внешний модуль для предоставления дополнений, а fish извлекает свои дополнения из истории команд пользователя. [49]
Оболочки могут записывать историю каталогов, в которых находился пользователь, и позволять быстро переключаться на любое записанное местоположение. Это называется «стек каталогов». Концепция была реализована еще в 1978 году [50] в выпуске оболочки C (csh).
PowerShell позволяет использовать несколько именованных стеков. Расположение (каталоги) можно помещать в текущий стек или именованный стек или извлекать из него. Любой стек может стать текущим (по умолчанию) стеком. В отличие от большинства других оболочек, концепция расположения PowerShell позволяет стекам расположения хранить расположения файловой системы, а также другие типы расположений, такие как, например, организационные единицы/группы Active Directory , базы данных/таблицы/объекты SQL Server , приложения/сайты/виртуальные каталоги Internet Information Server .
Интерпретаторы командной строки 4DOS и его графический преемник Take Command Console также имеют стек каталогов.
Имя каталога можно использовать напрямую как команду, которая неявно изменяет текущее местоположение на каталог.
Это следует отличать от несвязанной функции загрузки диска, поддерживаемой Concurrent DOS , Multiuser DOS , System Manager и REAL/32 , где буква диска L: будет неявно обновлена, чтобы указать на путь загрузки загруженного приложения, тем самым позволяя приложениям ссылаться на файлы, находящиеся в их каталоге загрузки, под стандартизированной буквой диска, а не под абсолютным путем. [51]
Если командная строка не соответствует команде или аргументам напрямую, проверка орфографии может автоматически исправить распространенные ошибки ввода (такие как чувствительность к регистру , пропущенные буквы). Для этого есть два подхода: оболочка может либо предложить возможные исправления при вызове команды, либо это может произойти раньше в рамках завершения или автопредложения.
Оболочки tcsh и zsh имеют опциональную проверку/исправление орфографии при вызове команды.
Fish выполняет автокоррекцию по завершении и автопредложение. Таким образом, эта функция не мешает при вводе всей команды и нажатии Enter, тогда как чрезмерное использование клавиш Tab и Стрелка вправо делает оболочку в основном нечувствительной к регистру.
Модуль PowerShell PSReadLine [31] (поставляемый с версией 5.0) предоставляет возможность указать CommandValidationHandler ScriptBlock, который запускается перед отправкой команды. Это позволяет настраивать исправление часто встречающихся опечаток в командах и выполнять проверку перед фактическим запуском команды.
Скрипт оболочки (или задание) может сообщать интерактивному пользователю о ходе выполнения длительных задач.
Системы Unix/Linux могут предлагать поддержку других инструментов, использующих индикаторы прогресса из скриптов или как автономные команды, такие как программа "pv". [52] Однако они не являются интегрированными функциями оболочек.
PowerShell имеет встроенную команду и функции API (которые используются при создании команд) для записи/обновления индикатора выполнения. Сообщения индикатора выполнения отправляются отдельно от обычного вывода команды, и индикатор выполнения всегда отображается в конечной интерактивной консоли пользователя независимо от того, исходят ли сообщения о выполнении из интерактивного скрипта, из фонового задания или из удаленного сеанса.
Процессоры командной строки JP Software%COLORDIR%
обеспечивают настраиваемую пользователем раскраску имен файлов и каталогов в списках каталогов на основе их расширения файла и/или атрибутов с помощью опционально определяемой переменной среды.
Для оболочек Unix/Linux это функция команды ls и терминала.
Процессоры командной строки в DOS Plus , Multiuser DOS , REAL/32 и во всех версиях DR-DOS поддерживают ряд дополнительных переменных среды для определения escape-последовательностей, позволяющих управлять выделением текста, возвратом или раскрашиванием для отображения или печати в таких командах, как TYPE . Все упомянутые процессоры командной строки поддерживают %$ON%
и %$OFF%
. Если они определены, эти последовательности будут выдаваться до и после имен файлов. Типичная последовательность для %$ON%
будет \033[1m
в сочетании с ANSI.SYS для \033p
терминала ASCII или \016
для принтера IBM или ESC/P . Аналогично, типичные последовательности для %$OFF%
будут \033[0m
, \033q
, \024
, соответственно. Переменные %$HEADER%
и %$FOOTER%
поддерживаются только COMMAND.COM в DR-DOS 7.02 и выше для определения последовательностей, выдаваемых до и после текстовых блоков для управления выделением текста, разбиением на страницы или другими параметрами форматирования.
Для оболочек Unix/Linux это функция терминала.
Отличительной особенностью оболочки Fish является встроенная подсветка синтаксиса. По мере того, как пользователь печатает, текст окрашивается в цвет, показывающий, является ли ввод допустимой командой или нет (исполняемый файл существует и у пользователя есть разрешения на его запуск), а допустимые пути к файлам подчеркиваются. [53]
Независимый проект предлагает подсветку синтаксиса как дополнение к Z Shell (zsh). [54] Однако это не является частью оболочки.
PowerShell обеспечивает настраиваемую подсветку синтаксиса в командной строке через модуль PSReadLine [31] . Этот модуль может использоваться с PowerShell v3.0+ и поставляется с v5.0 и выше. Он загружается по умолчанию в хост командной строки "powershell.exe" начиная с v5.0. [55]
Take Command Console (TCC) предлагает подсветку синтаксиса в интегрированной среде.
4DOS, 4OS2, 4NT / Take Command Console и PowerShell (в PowerShell ISE) при нажатии ищут контекстно-зависимую справочную информацию .F1
Zsh предоставляет различные формы настраиваемой контекстно-зависимой справки как часть виджета run-help , команды _complete_help или в качестве параметров завершения некоторых команд.
Оболочка рыбы предоставляет краткие описания флагов команды во время завершения табуляции.
В ожидании того, что данное запущенное приложение может принять в качестве ввода с клавиатуры, пользователь оболочки дает команду оболочке сгенерировать последовательность имитированных нажатий клавиш, которую приложение будет интерпретировать как ввод с клавиатуры от интерактивного пользователя. Отправляя последовательности нажатий клавиш, пользователь может заставить приложение выполнить действия, которые было бы невозможно выполнить с помощью перенаправления ввода или которые в противном случае потребовали бы интерактивного пользователя. Например, если приложение реагирует на нажатия клавиш, которые не могут быть перенаправлены, различает обычные и расширенные клавиши, очищает очередь перед принятием нового ввода при запуске или при определенных условиях, или потому что оно вообще не читает стандартный ввод. Стекирование нажатий клавиш обычно также предоставляет средства для управления временем отправки имитированных клавиш или для задержки новых клавиш до тех пор, пока очередь не будет очищена и т. д. Оно также позволяет имитировать клавиши, которые отсутствуют на клавиатуре (потому что соответствующие клавиши физически не существуют или потому что используется другая раскладка клавиатуры) и, следовательно, их невозможно будет набрать пользователю.
Некоторые скрипты оболочки должны запрашивать у пользователя конфиденциальную информацию, такую как пароли , закрытые цифровые ключи, PIN-коды или другую конфиденциальную информацию. Конфиденциальный ввод не должен возвращаться на экран/устройство ввода, где он может быть получен неавторизованными лицами. Также следует избегать представления конфиденциальной информации в памяти открытым текстом, поскольку это может привести к компрометации информации, например, через файлы подкачки, дампы ядра и т. д. [71]
Оболочки bash, zsh и PowerShell предлагают это как отдельную функцию. [72] [73] Оболочки, которые не предлагают это как отдельную функцию, все равно могут отключить эхо с помощью некоторых других средств. Оболочки, работающие в операционной системе Unix/Linux, могут использовать внешнюю команду stty для отключения/включения эха входных символов. [74] Помимо того, что опция PowerShell не отображает символы обратно, она также шифрует вводимые символы посимвольно во время процесса ввода, гарантируя, что строка никогда не будет представлена в памяти незашифрованной, где она может быть скомпрометирована через дампы памяти, сканирование, транскрипцию и т. д.-AsSecureString
Некоторые операционные системы определяют разрешение на выполнение , которое может быть предоставлено пользователям/группам для файла, если сама файловая система его поддерживает.
В системах Unix разрешение на выполнение контролирует доступ к вызову файла как программы и применяется как к исполняемым файлам, так и к скриптам. Поскольку разрешение применяется в загрузчике программ , не требуется никаких обязательств со стороны вызывающей программы или вызываемой программы по обеспечению разрешения на выполнение — это также касается оболочек и других программ-интерпретаторов. Такое поведение предписывается библиотекой POSIX C , которая используется для взаимодействия с ядром. POSIX определяет, что exec
семейство функций должно завершиться ошибкой EACCESS (отказано в доступе), если файл отказывает в разрешении на выполнение (см. — Справочник по системным интерфейсам, Единая спецификация UNIX , версия 4 от The Open Group ).
Разрешение на выполнение применяется только при непосредственном запуске скрипта. Если скрипт вызывается как аргумент интерпретирующей оболочки, он будет выполнен независимо от того, имеет ли пользователь разрешение на выполнение этого скрипта.
Хотя Windows также указывает разрешение на выполнение , ни одна из специфичных для Windows оболочек не блокирует выполнение скрипта, если разрешение не предоставлено.
Несколько оболочек могут быть запущены или настроены для запуска в режиме, в котором пользователю доступен только ограниченный набор команд и действий. Хотя это и не граница безопасности (блокируется команда, обращающаяся к ресурсу, а не сам ресурс), тем не менее, это обычно используется для ограничения действий пользователей перед входом в систему.
Ограниченный режим является частью спецификации POSIX для оболочек, и большинство оболочек Linux/Unix поддерживают такой режим, в котором отключены некоторые встроенные команды и могут быть вызваны только внешние команды из определенного каталога. [75] [76]
PowerShell поддерживает ограниченные режимы через файлы конфигурации сеанса или конфигурации сеанса. Файл конфигурации сеанса может определять видимые (доступные) командлеты, псевдонимы, функции, поставщики путей и многое другое. [77]
Скрипты, вызывающие другие скрипты, могут представлять угрозу безопасности, поскольку они потенциально могут выполнять чужой код в контексте пользователя, запустившего исходный скрипт. Скрипты обычно разрабатываются исключительно для включения скриптов из известных безопасных мест; но в некоторых случаях, например, когда пользователю предлагается способ настройки среды или загрузки локализованных сообщений, скрипту может потребоваться включить другие скрипты/файлы. [78] Одним из способов устранения этого риска является предложение оболочкой безопасного подмножества команд, которые могут быть выполнены включенным скриптом.
Разделы данных PowerShell могут содержать константы и выражения, использующие ограниченный подмножество операторов и команд. [79] Разделы данных PowerShell используются, например, когда локализованные строки необходимо прочитать из внешнего источника, обеспечивая при этом защиту от нежелательных побочных эффектов.
pushd
) и Pop-Location (с псевдонимом ) позволяют помещать в стеки местоположений и извлекать из них popd
несколько типов местоположений (каталоги файловых систем, организационные единицы Active Directory , узлы реестра Windows и т. д.)....
Неопределенный каталог: сопоставление любого количества уровней каталогов — от нуля до нескольких — столько, сколько потребуется, чтобы совпала остальная часть шаблона.
Расширение скобок доступно в ksh93, pdksh, bash и zsh.
read -s Тихий режим. Если ввод поступает с терминала, символы не отображаются.
Добавив параметр -assecurestring, можно скрыть данные, введенные в командной строке
[...] вряд ли можно назвать пассивным списком настроенных переменных. Он может запускать другие команды (например, cat) и использовать операторы if для изменения своего выбора. Он даже заканчивается повтором сообщения. Будьте осторожны, когда вы что-то отправляете, так как это широко открытая дверь в ваш скрипт.