[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]

Руководство пользователя: Операционная система и устройства


Перенаправление ввода/вывода в оболочке C

Перед запуском команды оболочка C выполняет поиск символов перенаправления в командной строке. Такие символы означают, что необходимо перенаправить ввод или вывод.

Для перенаправления ввода и вывода команды применяются следующие операторы:

< Файл Открывает в качестве стандартного ввода указанный Файл (перед этим выполняется подстановка команд, переменных и имен файлов).
<<Слово В качестве стандартного устройства ввода будет применяться клавиатура до тех пор, пока не будет введено указанное Слово. Для параметра Слово подстановка переменных, имен файлов и команд не выполняется. Каждая введенная строка сравнивается с параметром Слово, а затем в строке выполняются все необходимые подстановки. Если в переменной Слово не задан ограничивающий символ (\, ", ' или `.) , то оболочка выполняет подстановку переменных и команд в строках вводимого текста, при этом для помещения в кавычки символов $ , \ и ` применяется символ \ . В командах, для которых выполняется подстановка, сохраняются все пробелы, символы табуляции и символы новой строки, за исключением последнего символа новой строки, который отбрасывается. Получившийся текст записывается во временный файл без имени, который передается команде в качестве стандартного ввода.

>Файл

 >!Файл

 >&Файл

>&!Файл Стандартный вывод будет связан с указанным Файлом. Если Файл не существует, то он будет создан. Если Файл существует, то все его содержимое удаляется. Если установлена переменная оболочки noclobber, то в параметре Файл должно быть задано имя нового файла, специального символьного файла или файла вывода сообщений об ошибках. Это позволяет предотвратить случайное повреждение файлов. Для подавления этой опции укажите конструкцию с символом ! . Подстановки в параметре Файл выполняются так же, как и для входных файлов <. Символ >& задает перенаправление стандартного вывода и вывода сообщений об ошибках в указанный Файл. В приведенном ниже примере показано, как перенаправить стандартный вывод в файл /dev/tty, а вывод сообщений об ошибках - в файл /dev/null. Для разделения стандартного вывода и вывода сообщений об ошибках необходимо указать круглые скобки.

% (find / -name vi -print > /dev/tty) >& /dev/null

> >Файл

> >!Файл

> >&Файл 

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

Команде передаются переменные среды, которые были установлены при запуске оболочки, с учетом заданного перенаправления ввода/вывода. В отличие от многих других оболочек, у команды из сценария оболочки по умолчанию нет доступа к командной строке, из которой эта команда была вызвана. Вместо этого такие команды получают исходные данные из стандартного устройства ввода оболочки. Для просмотра внутренних данных воспользуйтесь способом <<. Такой способ позволяет применять командные файлы оболочек в качестве элементов конвейера и как самостоятельные команды. Обратите внимание, что если команда выполняется в фоновом режиме, то ее стандартный ввод по умолчанию не перенаправляется в файл /dev/null. Вместо этого стандартный ввод по-прежнему связан с вводом с клавиатуры.

Для того чтобы перенаправить вывод сообщений об ошибках и стандартный вывод в конвейере, нужно указать символы |& , а не просто символ | .

Операторы

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

Для применения операторов foreach, switch, while и if (в форме if-then-else) необходимо задать все основные ключевые слова в строке ввода в виде одной команды.

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


[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]