Европейский Университет в Санкт-Петербурге
Опубликован: 10.10.2005 | Доступ: свободный | Студентов: 1716 / 298 | Оценка: 4.30 / 3.85 | Длительность: 16:22:00
ISBN: 978-5-94774-820-8
Лекция 10:

Командные процессоры

< Лекция 9 || Лекция 10: 123456789

Установка приглашения shell

Командный интерпретатор имеет несколько вариантов приглашений на разные случаи жизни.

По умолчанию в sh - это $, в csh - %. Привилегированный пользователь ( root ) имеет другое приглашение - #.

В среде окружения каждого командного процессора есть переменные PS1 и PS2. Это - вид обычного приглашения и приглашения к продолжению ввода команды соответственно.

При вводе длинной команды можно набрать ее в две строки. для этого следует в конце первой строки набрать символ обратного слэша и нажать Enter - вот так:

\<Enter>

и продолжить ввод на следующей строке. Команда может быть многострочной, как правило, допустимая длина команды составляет 1024 символа. Обратный слэш экранирует следующий за ним символ перевода строки от интерпретации в качестве символа завершения команды. При переходе к новой строке появится символ >, так как именно это значение по умолчанию имеет PS2.

В csh и tcsh вместо PS1 и PS2 определены переменные prompt и prompt2. Некоторые командные процессоры, в частности, ksh, имеют дополнительные приглашения для специальных случаев. Они хранятся в переменных PS3, PS4 и т.д., а в csh - в prompt3 и prompt4.

Многие реализации командных процессоров (прежде всего, bash ) умеют показывать приглашения, включающие в себя динамически подставляемые части (например, имя текущего каталога). В этих командных процессорах есть свои собственные макроопределения для таких подстановок. Например, имя текущего каталога в bash подставляется в приглашение командной строки с помощью макроса \w, а в csh - с помощью %/. Помните, что назначать желаемое значение переменной можно только, указывая макрос внутри апострофов, чтобы экранировать его от интерпретации командным процессором, например в bash:

$PS1='\w$'

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

Перечень спецсимволов

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

Таблица 10.6. Специальные символы командных процессоров
командный процессор основные спецсимволы
sh $ * ? \ ` ' " [ ] < > &
csh $ * ? \ ` ' " ! ^ { } [ ] ! % < > &
ksh $ * ? \ ` ' " ! ^ { } [ ] < > &
bash $ * ? \ ` ' " ! ^ { } [ ] % < > &

Для ввода специальных символов без учета их специального смысла (например, для вычисления произведения двух чисел выполняется команда expr 2 \* 2, надо передать программе expr просто звездочку, не расшифровывая ее специальное значение для командного процессора ) в командной строке предваряйте их символом экранирования \ или заключайте в кавычки или апострофы. Кавычки отличаются от апострофов тем, что они экранируют от интерпретации все специальные символы, за исключением `, $ и \, а апострофы экранируют абсолютно все специальные символы.

Разбор командной строки

Каждый командный процессор выполняет разбор командной строки в строго определенном порядке:

  • определение команд и их аргументов;
  • подстановка псевдонимов (определенных командой alias );
  • подстановка имен файлов согласно шаблонам;
  • подстановка результата выполнения команды, если есть конструкция ` ` ;
  • запуск программ и передача им переменных среды окружения и аргументов.

Кэширование имен выполняемых файлов

Командные процессоры csh и tcsh кэшируют сразу после начала работы список выполняемых файлов из каталогов, указанных в переменной path, поэтому при изменении значения этой переменной или при добавлении новых исполняемых файлов в указанные в ней каталоги следует выполнять команду rehash, чтобы командный процессор обнаружил новые каталоги и команды. Без этой команды новые программы будут недоступны, их придется вызывать по полному имени файла.

< Лекция 9 || Лекция 10: 123456789