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

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


Перенаправление ввода/вывода в оболочке Korn (POSIX)

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

За исключением описанных случаев, оболочка всегда выполняет подстановку команд и параметров в переменных Слово и Цифра. Подстановка имени файла выполняется только тогда, когда шаблону соответствует единственное имя, и он не может быть интерпретирован, как пустая строка.

<Слово Стандартный ввод связывается с файлом, заданным в параметре Слово (ему присваивается дескриптор файла, равный 0).
>Слово Стандартный вывод связывается с файлом, заданным в параметре Слово(файлу присваивается дескриптор, равный 1). Если файл не существует, то оболочка создает его. Если файл существует и включена опция noclobber, то будет отправлено сообщение об ошибке; если же опция выключена, то все данные из файла удаляются.
>|Слово Действие этой команды аналогично действию команды >Слово, однако этот оператор перенаправления подавляет опцию noclobber.
> >Слово Стандартный вывод связывается с файлом, заданным в параметре Слово. Если файл уже существует, то оболочка добавляет вывод к этому файлу (за символом конца файла). Если файл не существует, то оболочка создает его.
<>Слово Стандартный ввод связывается с файлом, заданным в параметре Слово, который открывается на чтение и запись.
<<[-]Слово Строки текста считываются до тех пор, пока не будет обнаружена строка, заданная в параметре Слово, или символ конца файла. Оболочка не выполняет подстановку параметров, команд и имен файлов в указанном файле. Получившийся текст, который называется документом ввода с консоли, применяется в качестве стандартного ввода. Дополнительная информация о документе ввода с консоли приведена в разделе "Ввод данных с консоли". Если строка Слово указана в кавычках, то подстановки в тексте документа выполняться не будут.

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

[n]<<слово
   документ ввода с консоли
разделитель

Если параметр слово задан в кавычках, то разделителем считается строка слово без кавычек. В строках документа ввода с консоли подстановки выполняться не будут. Если параметр слово указан без кавычек, то разделителем считается сама строка. В этом случае для всех строк документа ввода с консоли выполняется подстановка параметров, команд и чисел.

Для перенаправленных потоков данных оболочка выполняет подстановку параметров. Если символ \ , $ , ` или первый символ параметра Слово не должен интерпретироваться, как специальный, то укажите перед ним символ \.

Если вместе с << задан символ - , то в параметре Слово и строках вводимого документа оболочка удаляет все начальные символы табуляции.

<&Цифра Стандартный ввод связывается с файлом, дескриптор которого указан в параметре Цифра.
>&Цифра Стандартный вывод связывается с файлом, дескриптор которого указан в параметре Цифра.
<&- Закрывает файл стандартного ввода.
>&- Закрывает файл стандартного вывода.
<&p Связывает ввод параллельного процесса со стандартным вводом.
>&p Записывает вывод параллельного процесса в стандартный вывод.

Если перед одной из опций перенаправления задан дескриптор файла, то вместо стандартного ввода или вывода будет применяться этот файл. В приведенном ниже примере оболочка открывает файл с дескриптором 2 на запись. Этот файл будет применяться вместо стандартного вывода (дескриптора 1):

... 2>&1

Важен порядок символов перенаправления. С каждым символом перенаправления оболочка связывает пару (Дескриптор_Файла, Файл). Например, в операторе:

... 1>Файл 2>&1

дескриптор 1 связывается с файлом, заданным в параметре Файл. Затем дескриптор файла 2 связывается с файлом, дескриптор которого равен 1 (Файл). Если изменить порядок операций перенаправления, то дескриптор файла 2 будет связан с терминалом (раньше связанным с дескриптором файла 1), а затем дескриптор файла 1 будет связан с файлом, заданным в параметре Файл.

Если за командой указан символ & , а управление заданием отключено, то по умолчанию стандартный ввод команды связывается с пустым файлом /dev/null. Если же применяется управление заданием, то среда выполнения команды содержит те дескрипторы файлов вызывающей оболочки, которые заданы в спецификациях ввода/вывода.

Дополнительная информация о перенаправлении ввода/вывода приведена в разделе "Глава 4, Перенаправление ввода и вывода"

Параллельные процессы

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

Параллельный процесс запускается с помощью оператора |& , указанного после команды. Стандартный ввод и вывод команды перенаправляется в соответствии с конвейером, определяемым вашим сценарием.

На параллельный процесс накладываются следующие ограничения:

В следующем примере показано, как входные данные передаются параллельному процессу, и как формируется его вывод:

echo "Начальный процесс"
./FileB.sh |&
read -p a b c d
echo "Сообщение параллельного процесса: $a $b $c $d"
print -p "Передано параллельному  процессу"
read -p a b c d
echo "Получено от параллельного процесса: $a $b $c $d"

FileB.sh
   echo "Параллельный процесс  запущен"
   read a b c d
   echo $a $b $c $d

В результате в стандартный вывод будет записано следующее:

Начальный процесс
Сообщение от параллельного процесса: Параллельный процесс запущен
Получено от параллельного процесса: Передано параллельному процессу 

Команда print -p предназначена для записи данных в устройство стандартного ввода параллельного процесса. Для чтения из стандартного вывода параллельного процесса предназначена команда read -p.

Перенаправление ввода/вывода параллельного процесса

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

exec 5>&p

задает в качестве устройства ввода параллельного процесса файл с дескриптором 5.

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

read -u5


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