nextuppreviouscontents
Next:Недеструктивное перенаправление выводаUp:Стыкование команд в системе Previous:Перенаправление ввода и вывода

Использование состыкованных команд

  Выше уже демонстрировалось, как использовать программу sort в качестве фильтра. В этих примерах предполагалось, что исходные данные находятся в некотором файле или что эти исходные данные будут введены с клавиатуры (стандартного ввода). Однако как поступить, если вы хотите отсортировать данные, которые являются результатом работы какой-либо другой команды, например, ls?

Будем сортировать данные в обратном алфавитном порядке; это делается опцией -r команды sort. Если вы хотите перечислить файлы в текущем каталоге в обратном алфавитном порядке, один из способов сделать это будет таким. Применим сначала команду ls:

/home/larry/papers# ls
english-list 
history-final
masters-thesis 
notes 
/home/larry/papers#
Теперь перенаправляем выход команды ls в файл с именем file-list:
/home/larry/papers# ls $>$ file-list
/home/larry/papers# sort -r file-list
notes 
masters-thesis 
history-final 
english-list 
/home/larry/papers#
Здесь выход команды ls сохранен в файле, а после этого этот файл был обработан командой sort -r. Однако этот путь является неизящным и требует использования временного файла для хранения выходных данных программы ls.

  Решением в данной ситуации может служить создание стыкованных команд (pipelines). Стыковку осуществляет командная оболочка, которая stdout первой команды направляет на stdin второй команды. В данном случае мы хотим направить stdout команды ls на stdin команды sort. Для стыковки используется символ "|", как это показано в следующем примере:

/home/larry/papers# ls | sort -r
notes 
masters-thesis 
history-final 
english-list 
/home/larry/papers#
Эта команда короче, чем совокупность команд, и ее проще набирать.

Рассмотрим другой полезный пример. Команда

/home/larry/papers# ls /usr/bin
выдает длинный список файлов. Большая часть этого списка пролетает по экрану слишком быстро, чтобы содержимое этого списка можно было прочитать. Попробуем использовать команду more для того, чтобы выводить этот список частями:
/home/larry/papers# ls /usr/bin | more
Теперь можно этот список "перелистывать".

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

/home/larry/papers# ls | sort -r | head -1
notes 
/home/larry/papers\#
где команда head -1 выводит на экран первую строку получаемого ей входного потока строк (в нашем случае поток состоит из данных от команды ls), отсортированных в обратном алфавитном порядке.


nextuppreviouscontents
Next:Недеструктивное перенаправление выводаUp:Стыкование команд в системе Previous:Перенаправление ввода и вывода
root

Sun Aug 29 12:01:30 MSD 1999