Интерпретатор командной строки (shell). Операционная система Unix

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

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

@ echo off : begin Cls Title Калькулятор Color 71 Echo Введите уравнение: Set /P exp = Set /A result =% exp % Title Вычислено Echo Ваше уравнение: %exp% Echo Решение: %result% Pause > nul goto begin

Калькулятор, для командной оболочки bash :

#!/usr/bin/env bash echo "Калькулятор" while read -p "Введите выражение: " expr do echo "Результат: $(($expr )) " done

Понятия

Оболочка в своей работе оперирует простыми командами.

Простая команда - это последовательность слов через пробел. Нажатие клавиши Enter при вводе команды или перевод строки при обработке сценария являются для командного интерпретатора признаком завершения команды. Она обрабатывается и выполняется.

Конвейер - это последовательность одной или более команд, разделенных |(& для cmd.exe). Стандартный выходной поток каждой команды, кроме последней, соединяется при помощи программного канала со стандартным входным потоком следующей команды. Каждая команда выполняется как отдельный процесс; интерпретатор ожидает окончания последней команды. Статусом выхода конвейера является статус выхода его последней команды. Вот пример простого конвейера для интерпретатора bash:

$ ls | tee save | wc 15 15 100

Командные интерпретаторы

Data Control Language - язык баз данных для осуществления административных функций

Digital Command Language - интерпретатор командной строки в операционных системах фирмы DEC.

DCL - современная французская тяжёлая бронированная ремонтно-эвакуационная машина

MZ (формат)

MZ - стандартный формат 16-битных исполняемых файлов с расширением.EXE для DOS. Назван так по сигнатуре - ASCII-символам MZ (4D 5A) в первых двух байтах. Эта сигнатура - инициалы Марка Збиковски, одного из создателей MS-DOS.Формат был разработан как замена устаревшему формату.COM. Исполняемые файлы MZ включают метаданные, могут иметь размер больше 64 Кбайт и использовать несколько сегментов памяти различного типа (кода, данных и стека), точка входа в программу также может быть в любом месте (в файлах.COM выполнение команд всегда начинается непосредственно с начала файла). Метод загрузки исполняемого файла определяется по сигнатуре: при её наличии обрабатывается MZ-заголовок, при отсутствии файл запускается как.COM - независимо от расширения файла (например, в последних версиях MS-DOS интерпретатор командной строки COMMAND.COM на самом деле является EXE-файлом).

Исполняемые файлы более поздних форматов для Windows начинаются с MZ-заглушки. Обычно заглушка, добавляемая компиляторами, выводит сообщение наподобие «This program cannot be run in DOS mode» («Эту программу невозможно запустить в режиме DOS»).

В старых компоновщиках для DOS могла применяться сигнатура ZM, которая также распознается MS-DOS и рядом совместимых ОС.

SQL*Plus

SQL*Plus - программа-интерпретатор командной строки для работы с системой управления базами данных Oracle Database, в которой могут выполняться команды SQL и PL/SQL в интерактивном виде или из сценария.

SQL*Plus работает как относительно простой инструмент, с интерфейсом командной строки. Программисты и администраторы СУБД обычно используют его как инструмент по умолчанию, так как интерфейс доступен практически в любой установке программного обеспечения Oracle.

TOPS-20

TOPS-20 (прежде TENEX) - операционная система, разработанная компанией BBN Technologies (Bolt, Beranek and Newman) для компьютеров DEC PDP-10. TENEX включала в себя полную реализацию системы виртуальной памяти, что позволяло программам не только осуществлять доступ ко всем 262 килословам памяти (эквивалент 1152 килобайт), но и делать это одновременно; система страничной организации памяти копировала данные с и на внешние носители по мере необходимости.

Одной из отличительных черт TENEX был её ориентированный на пользователя интерпретатор командной строки. В отличие от типичных систем того времени[каких?], в TENEX для ясности использовались длинные имена команд даже с избыточными словами. К примеру, для печати содержимого каталога в UNIX используется команда ls, а в TENEX - DIRECTORY (OF FILES), где DIRECTORY является ключевым словом, а OF FILES - избыточностью, внесённой для того, чтобы сделать назначение команды более очевидным.Для TENEX была написана самокопирующаяся по локальной сети программа Creeper, которую ошибочно считают одним из первых в мире компьютерных вирусов.

Take Command

Take Command - это имя, которое компания JP Software использовала в своих интерпретаторах командной строки с графическим интерфейсом (GUI) для Windows 3.1 (TC16), 32-разрядных версий Windows (TC32) и позже для OS/2 Presentation Manager (TCOS2). Они выпускались параллельно с версиями 4DOS 5.5, 4NT 2.5 и 4OS2 2.52. Продукты для OS/2 и Windows в 16-разрядных вариантах просуществовали до версии 2.02, их можно загрузить и сейчас с FTP-сайта JP Software.

Take Command сегодня - это интерпретатор командной строки для операционных систем семейства Microsoft Windows. Его преимущества перед стандартной командной оболочкой Windows такие же, как у 4DOS перед COMMAND.COM из поставки MS-DOS.

Начиная с версии 9, название Take Command относится ко всему пакету программ: TCI (командный интерфейс в вкладками) и 4NT. Разработка исходной версии Take Command прекращена. Компонент TCI теперь расширен: он включает диспетчер файлов, настраиваемые панели и ряд других окон, а 4NT переименован в TCC и помимо полной версии доступен в бесплатной «облегчённой» (TCC/LE).

В состав Take Command добавлены встроенные редактор и отладчик пакетных файлов, в командах реализован доступ к файлам по FTP и HTTP, доступ к сетевой файловой системе, интеграция с Active Scripting, команды мониторинга системы и управления службами Windows.

Take Command Console (TCC)

Take Command Console (TCC) (прежние названия - 4DOS for Windows NT и 4NT) - это интерпретатор командной строки, выпускаемый компанией JP Software как более функционально насыщенная замена стандартному интерпретатору командной строки в Microsoft Windows - CMD.EXE. TCC основан на ранее выходивших командных оболочках 4DOS для DOS и 4OS/2 для OS/2.

Начиная с версии 12 у 4NT удалена поддержка Windows 95, 98, ME, NT и 2000. Начиная с версии 16 у TCC удалена поддержка Windows XP, хотя работа в XP по-прежнему возможна. 4NT переименована в Take Command Console (TCC) как часть пакета JP Software Take Command версии 9 и новее.

TCC предоставляет большой набор возможностей для работы с командной строкой и пакетными файлами. Для обеспечения обширного доступа к операционной системе TCC позволяет совместно работать с другими языками сценариев - REXX, Ruby и Perl, или скрипт-языками Windows, в виде движков Active Scripting - VBScript и JScript, а также PerlScript (через ActivePerl), TclScript (через ActiveTcl), PythonScript (через ActivePython), и версией скрипт-движка Object REXX.

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

Интерфейс командной строки (англ. Command line interface, CLI) - разновидность текстового интерфейса (CUI) между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд), в UNIX-системах возможно применение мыши. Также известен под названием консоль.

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

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

Консоль восстановления

Консоль восстановления (англ. Recovery Console) - компонент, включенный в состав Windows 2000, Windows XP и Windows Server 2003. Он предоставляет администраторам средства выполнения ограниченного круга задач с использованием интерфейса командной строки. Его основная задача заключается в том, чтобы позволить администраторам восстанавливать ОС в ситуациях, когда Windows не загружается до состояния графического интерфейса пользователя. Консоль восстановления используется для предоставления доступа к жесткому диску в чрезвычайной ситуации через командную строку. Таким образом, к консоли восстановления можно получить доступ либо через исходный установочный носитель, используемый для установки Windows, либо также можно установить на жесткий диск и добавить в меню NTLDR, однако, полагаясь на последнее, это более рискованно, потому что для этого требуется, чтобы компьютер загрузился до NTLDR.

Сравнение языков программирования

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

При заполнении таблицы учтены только фактические данные, при том, что наличие возможности не обязательно является преимуществом языка, а отсутствие - недостатком.

Точка соединения NTFS

Точка соединения NTFS (англ. NTFS Junction Point) - нововведение в файловой системе NTFS 3.0 (файловая система по умолчанию в Windows 2000). Суть нововведения заключается в том, что указанный логический диск либо папка будет отображаться как папка на другом логическом диске либо в другой папке. Эта возможность позволяет создавать некоторые эффекты с файловой системой (например, хранить два профиля одного и того же пользователя и переключаться между ними без особых проблем). Точка соединения реализована в NTFS как особый тип точки повторной обработки (англ. reparse point).

Данную функцию можно настроить в оснастке «Управление дисками»: щелчок правой кнопкой на подключаемом диске, пункт «Изменить букву диска или путь к диску…», далее в списке будут отображены все возможные пути к диску, по умолчанию диск доступен по своей букве («Х:» - где Х буква диска). Менять пути к диску можно соответствующими кнопками под списком.

Для создания точки соединения на папку можно воспользоваться утилитой linkd, которая входит в комплект Windows 2000 and Windows XP Resource Kits. В Windows Vista и выше точку соединения или символьную ссылку можно создать с помощью стандартной консольной команды mklink.

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

Шебанг (Unix)

Шебанг (англ. shebang, sha-bang, hashbang, pound-bang, or hash-pling) - в программировании последовательность из двух символов: решётки и восклицательного знака ("#!") в начале файла скрипта.

Когда скрипт с шебангом выполняется как программа в Unix-подобных операционных системах, загрузчик программ рассматривает остаток строки после шебанга как имя файла программы-интерпретатора. Загрузчик запускает эту программу и передаёт ей в качестве параметра имя файла скрипта с шебангом. Например, если полное имя файла скрипта "path/to/script" и первая строка этого файла:

#!/bin/shто загрузчик запускает на выполнение "/bin/sh" (обычно это Bourne shell или совместимый интерпретатор командной строки) и передаёт "path/to/script" как первый параметр.

Строка с шебангом обычно пропускается интерпретатором, так как символ "#" является символом начала комментариев во многих скриптовых языках. Некоторые интерпретаторы, которые не используют символ решётки для обозначения начала комментариев (такие, как Scheme), могут пропустить строку шебанга, определив её назначение. Другие решения полагаются на препроцессор, который обрабатывает и удаляет строку шебанга перед тем, как остальная часть скрипта передаётся компилятору или интерпретатору. Так, например, работает InstantFPC, который позволяет запускать программы, написанные на Free Pascal, как скрипты на некоторых операционных системах.

Драйверы символьных устройств

При вводе команды поток символов в первую очередь интерпретируется драйвером символьного устройства. Какой именно драйвер работает, в каждом случае зависит от используемого оборудования (более подробные сведения см. в «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01).

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

Режимы ввода

Драйверы устройств символьного ввода/вывода могут функционировать либо в режиме необрабатываемых ("сырых") входных данных (raw input mode), либо в каноническом режиме (canonical mode), или режиме редактируемых входных данных (edited input mode). В режиме "сырых" входных данных все символы передаются приложению по мере их ввода. В режиме редактируемых входных данных приложение получает символы только после завершения ввода всей строки (о чем, как правило, свидетельствует символ возврата каретки).

Поддержка терминалов

Некоторым программам (например, vi) требуется информация о том, какие действия может выполнять ваш терминал (возможно ли перемещение курсора, очистка экрана и т. д.). Переменная окружения TERM указывает на тип используемого терминала, а каталог /usr/lib/terminfo представляет собой базу данных терминалов. В этом каталоге содержится набор подкаталогов (от a до z), в которых хранится информация для соответствующего терминала. Некоторые приложения вместо каталога /usr/lib/terminfo используют каталог /etc/termcap, представляющий собой устаревшую однофайловую модель базы данных.

Терминалом по умолчанию является qansi-m (QNX-версия терминала ANSI). Более подробные сведения об установке типа терминала см. в подразд. "Типы терминалов" раздела 9.

Служба telnet

При использовании сетевой службы telnet для связи между двумя QNX-машинами (под управлением QNX 4 или QNX Neutrino), для активизации восьмибитового тракта данных следует задавать параметр -8. Если вы подключаетесь к машине с QNX Neutrino из машины, управляемой какой-либо другой ОС, и терминал при этом не работает надлежащим образом, завершите telnet и запустите эту утилиту снова с параметром -8.

Примечание . При запуске telnet из ОС Windows пользуйтесь режимом ansi или vt100, в зависимости от типа терминала.

Общие сведения о клавиатуре

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

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

Из книги Журнал «Компьютерра» N 33 от 12 сентября 2006 года автора Журнал «Компьютерра»

СОФТЕРРА: Высокохудожественный командный интерпретатор Автор: Илья ШпаньковКогда разговор заходит о растровых графических редакторах, абсолютное большинство людей в первую очередь вспоминает Adobe Photoshop. Сторонники свободного софта, конечно, не забудут упомянуть и

Из книги Давайте создадим компилятор! автора Креншоу Джек

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

Из книги Linux-сервер своими руками автора Колисниченко Денис Николаевич

19.7. Интерпретатор команд bash Интерпретатор команд - это программа, выполняющая команды пользователя. Стандартным интерпретатором (или оболочкой) является bash (Bourne Again Shell). Достаточно распространенными также являются следующие интерпретаторы: sh, ash, bsh, tcsh, csh, zsh. Список

Из книги Программирование на языке Пролог для искусственного интеллекта автора Братко Иван

Из книги Бесплатные разговоры через Интернет автора Фрузоров Сергей

16.2. Простой интерпретатор программ, управляемых образцами Для описания модулей, управляемых образцами, мы применим следующую синтаксическую конструкцию:ЧастьУсловия ---> ЧастьДействияЧасть условия представляет собой список условий:[ Условие1, Условие2, Условие3, ...]где

Из книги Ubuntu 10. Краткое руководство пользователя автора Колисниченко Д. Н.

Глава 4 TeamSpeak - командный разговор через компьютерную сеть Чем TeamSpeak отличается от TeamTalk Программа TeamSpeak очень уж похожа на TeamTalk: те же каналы, та же возможность работать как в Интернете, так и в локальной сети, выбор разнообразных кодеков по сжатию звука, клиент-серверный

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Глава 22 Командный интерпретатор bash 22.1. Что нужно знать о bash bash - это наиболее часто использующаяся командная оболочка (командный интерпретатор) Linux. Основное предназначение bash - выполнение команд, введенных пользователем. Пользователь вводит команду, bash ищет программу,

Из книги Операционная система UNIX автора Робачевский Андрей М.

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

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Командный интерпретатор shell Все современные системы UNIX поставляются по крайней мере с тремя командными интерпретаторами: Bourne shell (/bin/sh), С shell (/bin/csh) и Korn shell (/bin/ksh). Существует еще несколько интерпретаторов, например Bourne-Again shell (bash), со сходными функциями.Командный

Из книги UNIX - универсальная среда программирования автора Пайк Роб

Интерпретатор bourne shell Bourne shell является стандартным интерпретатором команд, который входит в состав всех систем UNIX и совместим с интерпретатором bash в Linux. В книге, посвященной shell–программированию и не привязанной к конкретной операционной системе, в качестве общего

Из книги автора

Интерпретатор shell В первой части книги рассматриваются общие вопросы, связанные с работой в интерпретаторе shell.В главе 1 рассказывается о правах доступа к файлам и каталогам, а также о том, как создавать символические ссылки.Чтобы на поиск созданного вами файла не уходило

Из книги автора

24.1. Полный список команд, встроенных в интерпретатор shell В табл. 24.1 содержится полный перечень стандартных встроенных команд. Таблица 24.1. Стандартные встроенные команды: Нуль, всегда возвращает истинное значение. Считывание файлов из текущего интерпретатора

BAT Расширение файла: .bat, .cmd (только Windows NT) Тип формата: Скриптовый язык программирования Пакетный файл (англ. batch file) текстовый файл в OS/2 или Windows, содержащий последовательность команд, предназначенных для исполнения командным … Википедия

- (от англ. shell оболочка) интерпретатор команд операционной системы, обеспечивающий интерфейс для взаимодействия пользователя с функциями системы. В общем случае, различают оболочки с двумя типами интерфейса для взаимодействия с… … Википедия

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

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

Генеалогическое древо UNIX систем UNIX (читается юникс) семейство переносимых, многозадачных и многопользовательских … Википедия

Генеалогическое древо UNIX систем UNIX (читается юникс) группа переносимых, многозадачных и многопользовательских операционных систем. Первая система UNIX была разработана в 1969 г. в подразделении Bell Labs компании AT T. С тех пор было создано … Википедия

Генеалогическое древо UNIX систем UNIX (читается юникс) группа переносимых, многозадачных и многопользовательских операционных систем. Первая система UNIX была разработана в 1969 г. в подразделении Bell Labs компании AT T. С тех пор было создано … Википедия

Генеалогическое древо UNIX систем UNIX (читается юникс) группа переносимых, многозадачных и многопользовательских операционных систем. Первая система UNIX была разработана в 1969 г. в подразделении Bell Labs компании AT T. С тех пор было создано … Википедия

В Linux нет отдельного объекта под именем «система». Система - она на то и система, чтобы состоять из многочисленных компонентов, взаимодействующих друг с другом. Главный из системных компонентов - пользователь. Это он командует машиной, а та его команды выполняет. В руководствах второго и третьего разделов описаны системные вызовы (функции ядра) и библиотечные функции. Они-то и есть непосредственные команды системе. Правда, воспользоваться ими можно только написав программу (чаще всего - на языке Си), нередко - программу довольно сложную. Дело в том, что функции ядра реализуют низкоуровневые операции, и для решения даже самой простой задачи пользователя необходимо выполнить несколько таких операций, преобразуя результат работы одной для нужд другой. Возникает необходимость выдумать для пользователя другой - более высокоуровневый и более удобный в использовании - язык управления системой. Все команды, которые использовал Мефодий в работе, были частью именно этого языка.

Из чего несложно было заключить, что обрабатывать эти команды, превращать их в последовательность системных и библиотечных вызовов должна тоже какая-нибудь специальная программа, и именно с ней непрерывно ведёт диалог пользователь сразу после входа в систему. Так оно и оказалось: программа эта называется интерпретатор командной строки или командная оболочка («shell»). «Оболочкой» она названа как раз потому, что всё управление системой идёт как бы «изнутри» неё: пользователь общается с нею на удобном ему языке (с помощью текстовой командной строки), а она общается с другими частями системы на удобном им языке (вызывая запрограммированные функции).

Таким образом, упомянутые выше правила разбора командной строки - это правила, действующие именно в командном интерпретаторе: пользователь вводит с терминала строку, shell считывает её, иногда - преобразует по определённым правилам, получившуюся строку разбивает на команду и параметры, а затем выполняет команду, передавая ей эти параметры. Команда, в свою очередь, анализирует параметры, выделяет среди них ключи, и делает что попросили, попутно выводя на терминал данные для пользователя, после чего завершается. По завершении команды возобновляется работа «отступившего на задний план» командного интерпретатора, он снова считывает командную строку, разбирает её, вызывает команду... Так продолжается до тех пор, пока пользователь не скомандует оболочке завершиться самой (с помощью logout или управляющего символа « ^D », который для shell значит то же, что и для других программ: больше с терминала ввода не будет).

Конечно, командных интерпретаторов в Linux несколько. Самый простой из них, появившийся в ранних версиях UNIX, назывался sh , или «Bourne Shell» - по имени автора, Стивена Борна (Stephen Bourne). Со временем его - везде, где только можно - заменили на более мощный, bash , «Bourne Again Shell».

Игра слов: «Bourne Again» вслух читается как «born again», т. е. «возрождённый».

bash превосходит sh во всём, особенно в возможностях редактирования командной строки. Помимо sh и bash в системе может быть установлен «The Z Shell», zsh , самый мощный на сегодняшний день командный интерпретатор (шутка ли, 22 тысячи строк документации), или tcsh , обновлённая и тоже очень мощная версия старой оболочки «C Shell», синтаксис команд которой похож на язык программирования Си.

Когда Гуревич добавлял учётную запись Мефодия в систему, он не стал спрашивать того, какой командный интерпретатор ему нужен, потому что знал: для новичка имя командного интерпретатора - пустой звук. Тем не менее имя оболочки, запускаемой для пользователя сразу после входа в систему - т. н. стартовый командный интерпретатор (login shell), - это часть пользовательской учётной записи, которую пользователь может изменить командой chsh (change shell).

Какая бы задача, связанная с управлением системой, ни встала перед пользователем Linux, она должна иметь решение в терминах командного интерпретатора. Фактически, решение пользовательской задачи - это описание её на языке shell. Язык общения пользователя и командного интерпретатора - это высокоуровневый язык программирования, дополненный, с одной стороны, средствами организации взаимодействия команд и системы, а с другой стороны - средствами взаимодействия с пользователем, облегчающими и ускоряющими работу с командной строкой.

Иллюстрация 2. Интерфейс командной строки. Издание второе, переработанное и дополненное. Взаимодействие пользователя с компьютером посредством терминала и оболочки.

Команды и утилиты

$ apropos s . . . (четыре с половиной тысячи строк!)

Пример 18 . Бессмысленная команда

Одного неудачного запуска apropos Мефодию было достаточно для того, чтобы понять: команд в Linux очень много. Ему пришло в голову, что никакая программа - пусть даже и оболочка - не может самостоятельно разбираться во всех задокументированных командах. Кроме того, Гуревич называл большинство команд утилитами , то есть полезными программами. Стало быть, командный интерпретатор не обязан уметь выполнять всё, что вводит пользователь. Ему достаточно разобрать командную строку, выделить из неё команду и параметры, а затем запустить утилиту - программу, имя которой совпадает с именем команды.

В действительности собственных команд в командном интерпретаторе немного. В основном это - операторы языка программирования и прочие средства управления самим интерпретатором. Все знакомые Мефодию команды, даже echo , существуют в Linux в виде отдельных утилит. shell занимается только тем, что подготавливает набор параметров в командной строке (например, раскрывая шаблоны ), запускает программы и обрабатывает результаты их работы.

$ type info info is /usr/bin/info $ type echo echo is a shell builtin $ type -a echo echo is a shell builtin echo is /bin/echo $ type -a -t echo builtin file $ type -a -t date file $ type -at cat file

Пример 19 . Определение типа команды

В bash тип команды можно определить с помощью команды type . Собственные команды bash называются builtin (встроенная команда), а для утилит выводится путь , содержащий название каталога, в котором лежит файл с соответствующей программой, и имя этой программы. Некоторые - самые нужные - команды встроены в bash , даже несмотря на то, что они имеются в виде утилит (например, echo). Работает встроенная команда так же, но так как времени на её выполнение уходит существенно меньше, командный интерпретатор выберет именно её, если будет такая возможность. Ключ « -a » («a ll», конечно), заставляет type вывести все возможные варианты интерпретации команды, а ключ « -t » - вывести тип команды вместо пути.

По совету Гуревича Мефодий сгруппировал ключи, написав « -at » вместо « -a -t ». Многие утилиты позволяют так делать, уменьшая длину командной строки. Если встречается параметрический ключ, он должен быть последним в группе, а его значение - следовать, как и полагается, после. Группировать можно только однобуквенные ключи.

Слова и разделители

При разборе командной строки shell использует понятие разделитель (delimiter). Разделитель - это символ, разделяющий слова; таким образом командная строка - это последовательность слов (которые имеют значение) и разделителей (которые значения не имеют). Для shell разделителями являются символ пробела, символ табуляции и символ перевода строки (который всё-таки может попасть между словами способом, описанным в лекциях Работа с текстовыми данными и Возможности командной оболочки). Количество разделителей между двумя соседними словами значения не имеет.

Первое слово в тройке передаётся команде как первый параметр, второе - как второй и т. д. Для того, чтобы разделитель попал внутрь слова (и получившаяся строка с разделителем передалась как один параметр), всю нужную подстроку надо окружить одинарными или двойными кавычками:

$ echo One Two Three One Two Three $ echo One "Two Three" One Two Three $ echo "One > > Ой. И что дальше? > А, кавычки забыл!" One Ой. И что дальше? А, кавычки забыл! $

Пример 20 . Закавычивание в командной строке

В первом случае команде echo было передано три параметра - « One », « Two » и « Three ». Она их и вывела, разделяя пробелом. Во втором случае параметров было два: « One » и « Two Three ». В результате эти два параметра были также выведены через пробел. В третьем случае параметр был всего один - от открывающего апострофа « "One » до закрывающего « ...забыл!" ». Всё время ввода bash услужливо выдавал Мефодию подсказку « > » - в знак того, что набор командной строки продолжается, но в режиме ввода содержимого кавычек.