Глава 9

CLI (Shell) интерфейс

Shell, появившийся в версии ОС 1.3, есть не что иное, как улучшенный вариант CLI. Начиная со второй версии ОС, между CLI и Shell нет никакой разницы, т.к. CLI приобрел все Shell-возможности.

Для того, чтобы перейти в CLI из Workbench, необходимо дважды щёлкнуть по иконке "Shell" каталога System (либо по иконке "CLI" того же каталога при версии Kickstart < 2.0). В открывшемся окне вы увидите Shell-подсказку, которая, как правило состоит из номера Shell-процесса и текущего маршрута. Теперь вы можете вводить команды ОС с клавиатуры.

Shell-окна запоминают все введенные в них строки в т.н. "буфере истории". Нет необходимости вводить какие-либо строки повторно, достаточно воспользоваться курсорными клавишами "курсор вверх/вниз" для перелистывания содержимого этого буфера. Комбинации клавиш "Shift + курсор влево/вправо" переместят курсор в начало/конец вводимой строки.

Перед каждым запуском Shell автоматически исполняется файл "S:Shell-Startup", который настраивает различные параметры Shell.

Перенаправление ввода/вывода

При нахождении в Shell, ОС по умолчанию производит ввод символов с клавиатуры, а вывод — в текущее Shell-окно. Иногда возникает необходимость изменить обычное направление ввода/вывода; направить, например, поток вывода на принтер, чтобы напечатать содержимое каталога, либо попросить Амигу прочитать голосом какой-нибудь файл. Здесь на помощь приходят символы "<" и ">", которые могут быть использованы для того, чтобы перенаправить ввод и вывод соответственно. Эти символы имеют локальное действие т.е., работают в пределах только одной команды. Например, введя:

type S:User-Startup >SPEAK:

мы заставим Амигу прочитать голосом весь файл "S:User-Startup". Здесь мы использовали "говорилку" Амиги в качестве устройства вывода, где "распечатали" нужный нам файл.

Shell, начиная с версии ОС 1.3 имеет ещё одну возможность по переназначению потока вывода. С помощью комбинации символов ">>" можно добавить то, что будет выведено, к уже имеющемуся файлу. Например, если у нас есть файл названием "Каталоги", то после выполнения команды:

dir >>Каталоги RAM:

к содержимому файла "Каталоги" будет добавлен каталог RAM-диска.

Следует учесть, что если файл, к которому планируется "присоединить" некоторую информацию ещё не создан, то ОС 1.3 выдаст сообщение об ошибке, а более поздние версии ОС вначале создадут "пустой" файл, а затем добавят к нему то, что "выдал" Shell, что гораздо более логично.

Символ "*". указанный в качестве имени устройства ввода/вывода означает не что иное, как текущее консольное (т.е. CLI- или Shell-окно). Подобное применение символа "*" чрезвычайно удобно, поскольку позволяет трактовать консольные окна, как файлы, из которых можно читать и в которые можно производить запись.

Пример использования: рассортировать файл "RAМ:Имена" и вывести результат в текущее Shell-окно:

sort RAM:Имена ТО *

или ещё пример:

copy * TO PRT:

теперь всё, что мы набираем на клавиатуре будет немедленно распечатываться на принтере до тех пор, пока мы не нажмем комбинацию клавиш "CTRL + \", что означает EOF (End Of File — конец файла).

Символ "+" позволяет вводить команду, занимающую несколько строк: достаточно поставить "+" в конце строки и можно продолжить ввод команды с новой строки (нажав, разумеется, "Enter" после "+").

Образцы (подсказка)

Вряд ли кто-нибудь даже из самых опытных пользователей Амиг будет в состоянии запомнить все возможные комбинации аргументов Shell-команд. Здесь приходит на помощь встроенная во все стандартные команды ОС палочка-выручалочка: наберите имя команды, а после него — отделённый пробелом вопросительный знак. ОС немедленно покажет вам то, что называется образцом аргументов команды. Образец является по сути некоей аббревиатурой того, какие аргументы допустимы либо обязательно требуются для исследуемой команды. После вывода образца ОС терпеливо ждет, пока вы творчески осмыслите увиденное и введёте именно те аргументы, которые ею могут быть поняты (само имя команды повторно вводить не требуется). Если вы решите не вводить никаких параметров, то просто нажмите клавишу "Ввод" и команда будет исполнена безо всяких аргументов. Проверим, что получится если набрать:

dir ?

ОС тут же выведет подсказку:

DIR,ОРТ/К,ALL/S,DIRS/S,FILES/S,INTER/S:

Мы сразу видим, что в командных образцах аргументы разделяются запятыми. Каждый из аргументов может состоять из одной или двух частей, разделенных символом "/". Первой частью аргумента может являться либо имя аргумента, либо некоторое ключевое слово, ассоциированное с аргументом. Если первая часть аргумента — ключевое слово, то за ней может следовать идентификатор аргумента (/А, /К, /S, /N, /M, /F), который уточняет, что именно представляет собой сам аргумент. Когда вы хотите ввести команду ОС, ключевые слова должны быть набраны в точности так, как показано в образце (разумеется, только в том случае, если в них есть необходимость, что зависит как от конкретной команды, так и от того, какой результат вы желаете получить). А теперь расшифруем значения различных идентификаторов аргументов:

/А — (от слова always — всегда); этот аргумент должен всегда присутствовать для данной команды ОС, иначе выдается сообщение об ошибке.
Например:

diskchange ?
DEVICE/A: DF0: — имя диска должно быть указано.

/К — (от слова keyword — ключевое слово); необязательное ключевое слово. После ключевого слова должна следовать дополнительная информация, которая будет использована при исполнении команды. Ключевое слово может иметь не один, а несколько идентификаторов — например, FROM/К/А.

/S — (от слова switch — переключатель); если аргумент присутствует, то некоторая функция соответствующей команды ОС считается включённой, иначе — выключенной.

= — сообщает о том, что для ключевого слова, находящегося слева от "=" есть синоним, который находится справа от "=". Какой из синонимов выбрать, абсолютно безразлично. Один из синонимов обычно короче, а другой — понятнее.

Приведенные ниже идентификаторы "работают", начиная со второй версии ОС.

/М — (от слова multiply — несколько); аргументов может быть несколько. В ранних версиях на множественные аргументы указывала серия запятых. Если аргументу соответствуют несколько идентификаторов (например, /М/А), то идентификатор /М должен быть первым по счёту.

/N — (от слова number — число); аргумент должен быть числом.

/F — (от слова final — последний); введённый аргумент-строка должен быть самым последним среди всех имеющихся. Строка может содержать произвольное число пробелов.

Если аргументы для заданной команды введены неправильно, то ОС выдаст сообщение об ошибке "Отсутствует обязательный параметр", либо "Неверное число параметров".

Шаблоны (маски)

Некоторые команды ОС позволяют ссылаться на несколько файлов сразу; для этого используются т.н. шаблоны имён. Используя шаблоны, вы, например, можете разом скопировать все файлы с расширением ".txt" или удалить их. Те, кто работал в MS-DOS, наверное, сразу вспомнили про символы "*" и "?", но в Амиге дела обстоят несколько по-другому. Если в MS-DOS звездочка используется для замены произвольной строки, то в Амиге — это идентификатор начала командной последовательности, который позволяет вставлять другие идентифицирующие символы (в т.ч. такие же звездочки) после него. Кроме того, звездочка может являться идентификатором текущего консольного (т.е. CLI или Shell) окна. В версии Kickstart 2.0 или выше, можно заставить звездочку работать точно так же, как в MS-DOS, однако, сделать это можно только из некоторой прикладной программы (например, StartClick). Если уж дальше продолжать сравнение ОС Амиги (AmigaOS) и MS-DOS, то следует упомянуть, что число команд MS-DOS, позволяющих использовать шаблоны, превышает число аналогичных команд ОС Амиги. Зато шаблоны Амиги куда более мощные, нежели применяемые в MS-DOS. К примеру, можно —поймать— строки по таким признакам, как группа определённых символов где-нибудь в середине строки (неважно, сколько символов предшествуют искомой подстроке и сколько следуют за ней), искать символы по произвольным группам в начале и конце и т.д. По сути, шаблоны (маски) в AmigaOS представляют собой мощный и развитый механизм описания регулярных выражений.

Рассмотрим подробнее все эти возможности (напомним, что имена файлов в ОС Амиги могут содержать до 31-го символа (ограничение "штатной" файловой системы FFS в AmigaOS 1.3…3.1), иметь любое число расширений любой длины и содержать какие угодно знаки, например, быть полностью русскими).

Важнейшими символами шаблонов являются "#" (решётка) и "?". Комбинация решётки с каким-либо символом означает, что этот символ может повторяться любое число раз, либо отсутствовать вовсе. Пример: шаблон #Отчёт даст совпадения для: Отчёт, ОООООтчёт и тчёт.

Вопросительный знак может заменить любой символ (но не отсутствие символа). Пример: шаблон Мас?а даст совпадения для: Масса и Маска.

Комбинация #? по сути то же, что звездочка в MS-DOS — ей может соответствовать произвольная строка символов. Например, #? выберет все файлы текущего каталога, а Доклад#? — все файлы, начинающиеся со слова "Доклад" т.е. "Доклад 1", "Докладная.текст" и т.д.

Кроме символов решётки и вопросительного знака, в ОС Амиги имеются ещё несколько менее употребительных символов.

С помощью пары круглых скобок () вы может сгруппировать любое число символов в группу, которая будет считаться элементом поиска. Если теперь после решётки будет следовать группа символов, заключённая в круглые скобки, то ей может соответствовать любое число повторений этой группы в искомой строке (включая ни одного повторения). Например, шаблон #(по)лзти даст совпадения для: поползти, ползти и лзти.

Вертикальная черта "|" может трактоваться как слово "или", т.е. совпадение возможно либо с символом (группой символов) слева от черты, либо с символом (группой символов) справа от черты. Например, шаблон п(а|о)года даст совпадения для: погода и пагода.

Шаблон же (ДА|НЕТ) даст совпадения для: ДА и НЕТ.

Знак % обозначает пустую строку (отсутствие символов). Его удобно применять в тех случаях, когда # не обеспечивает должной гибкости поиска, поскольку иногда может потребоваться найти либо единственное вхождение требуемого символа в строке, либо его отсутствие. Пример: шаблон в(о|%) поле даст совпадения со строками: в поле и во поле. Совпадения же со строкой "воо поле", которое произошло бы в случае использования шаблона в#о поле, уже не произойдет.

Комбинация (?|%) сработает как на любой символ, так и на его отсутствие. Пример: (?|%)е?а даст совпадение на: беда и еда, но не даст на: "победа".

Вы можете спросить, а что делать, если искомая строка сама по себе включает какие-либо из символов описания шаблонов? Для этого используется знак апострофа " ' " — если после него поставить такой символ, то он будет трактоваться как обычный. Например, шаблон ч?о'? даст совпадение со словом что?.

Если же необходимо, чтобы поиск сработал на строке, содержащей символ апострофа, то в шаблоне необходимо поставить два апострофа подряд. Например, чтобы найти слово don't, шаблон должен быть: don"t.

Начиная с версии 2 в ОС Амиги введены еще два символа, управляющих поиском по шаблону. Первый из них - тильда "~", обозначающий отрицание. Если мы, например, хотим работать со всеми файлами, за исключением иконок (файлов с расширением ".info"), то выбрать их можно с помощью шаблона ~(#?.info).

И, наконец, последний символ "-" (тире), употребляемый вместе с парой квадратных скобок для определения диапазона подходящих символов. Например, шаблон [Б-Г]#? выберет все файлы, начинающиеся с букв Б, В, Г. Учтите только, что русская и английская буквы "А" в русифицированой AmigaOS совпадают, а твердый знак вынесен в самый конец русского алфавита (см. рис. "ASCII-таблица"), поэтому будьте осторожны при подобном выборе для русских строк!

Ещё одно замечание: если в шаблоне присутствуют пробелы, то он обязательно должен быть заключен в кавычки. А теперь подведем итог нашего повествования о шаблонах в кратком резюме:

#a найдёт любое число повторений символа, "а", а также его отсутствие.
X#Y совпадёт с X, XY, XYY и XYYY;
? найдёт любой символ, лишь бы он вообще был.
X?Y совпадёт с XAY, XBY и XCY;
#? совпадёт с любой строкой, либо ее отсутствием;
#(ab) найдёт любое число повторений группы "ab", а также её отсутствие.
#(XY)Z совпадёт с XYZ, XYXYZ, или просто с Z;
X|Y совпадёт или с X, или с Y.
Р(Ы|О)БА совпадёт с РЫБА или РОБА;
% совпадёт с отсутствующим символом.
К(Л|%)ОК совпадёт с КЛОК или КОК;
( ) выделение группы символов.
(X|Y)Z совпадёт с XZ или YZ.
X|YZ совпадёт с X или YZ;
(?|%) совпадёт с любым или отсутствующим символом.
К(?|%)ОК совпадёт с КЛОК или КОК;
' используется перед специальными символами (вроде %), чтобы отменить их "специальный" смысл.
DON''T совпадёт с DON'T;
~ логическое отрицание.
~А#? совпадёт со всеми строками, не начинающимися с буквы "А";
[a-c] совпадёт со всеми символами из диапазона от "а" до "с" включительно.


Сайт создан в системе uCoz