Командные процессоры
Установка приглашения 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.
Для ввода специальных символов без учета их специального смысла (например, для вычисления произведения двух чисел выполняется команда expr 2 \* 2, надо передать программе expr просто звездочку, не расшифровывая ее специальное значение для командного процессора ) в командной строке предваряйте их символом экранирования \ или заключайте в кавычки или апострофы. Кавычки отличаются от апострофов тем, что они экранируют от интерпретации все специальные символы, за исключением `, $ и \, а апострофы экранируют абсолютно все специальные символы.
Разбор командной строки
Каждый командный процессор выполняет разбор командной строки в строго определенном порядке:
- определение команд и их аргументов;
- подстановка псевдонимов (определенных командой alias );
- подстановка имен файлов согласно шаблонам;
- подстановка результата выполнения команды, если есть конструкция ` ` ;
- запуск программ и передача им переменных среды окружения и аргументов.
Кэширование имен выполняемых файлов
Командные процессоры csh и tcsh кэшируют сразу после начала работы список выполняемых файлов из каталогов, указанных в переменной path, поэтому при изменении значения этой переменной или при добавлении новых исполняемых файлов в указанные в ней каталоги следует выполнять команду rehash, чтобы командный процессор обнаружил новые каталоги и команды. Без этой команды новые программы будут недоступны, их придется вызывать по полному имени файла.