|
определив
для себя синоним (например, синонимом конструкции ls -al --color=always
| less, постранично выводящей список файлов со всеми атрибутами
и с выделением типов файлов цветами, может быть определена команда
lls).
Понять
эту простую вещь означает понять весьма серьезную
часть компьютерной культуры. Универсальные системы (например,
ОС), в отличие от специализированных (например, мультимедийных
киосков или игровых приставок) создаются не для удобства
пользования ими "из коробки" абстрактным "простым
пользователем", а для удобства их настройки (программирования)
конкретным пользователем под его конкретные нужды. Это
не удобство, а метаудобство, не встроенная в стены комнаты мебель,
а модульный гарнитур с инструкцией по сборке, не "для всех",
а для каждого. А "простых" пользователей не бывает,
все мы сложные и разные.
Утилиты
могут не только выводить текст, но и читать
ввод. Простейший пример -- утилита конкатенации cat, которая,
будучи издана без аргументов, просто построчно копирует текст
(см. рис. 3). Утилита, читающая что-либо из стандартного ввода и
выводящая что-либо на стандартный вывод, называется фильтром, фильтрами
являются многие из стандартных POSIX-утилит.
Стандартный
ввод-вывод -- это два файла, которые по умолчанию связаны
с текущим терминалом. Мощнейшим средством оболочки является перенаправление
ввода и вывода в произвольный файл, задающееся соответственно
знаками < и >, за которыми следуют имена файлов. На
рис. 4. показано перенаправление вывода команды cat в файл names и перенаправление
ввода этой команды из созданного предыдущей командой файла.
Важно заметить, что перенаправление стандартного ввода-вывода производится
именно оболочкой, "умения" распознавать перенаправление
как свои аргументы от самой утилиты (или, к примеру, пользовательской
программы) не требуется.
Еще
одним мощным средством оболочки является так называемый
"конвейер" (или "канал") -- соединение
вывода одной команды с вводом другой.
На
рис. 5 приведен развернутый пример. Командой cat
names names >names2 мы создаем файл names2, содержащий удвоенное
содержимое ранее созданного файла names. Утилитой sort его можно
отсортировать в алфавитном порядке, а про утилиту uniq известно,
что она удаляет повторяющиеся строки. Однако удаляет она только
подряд идущие строки, поэтому, чтобы уникализировать строки в файле,
содержащем их в произвольном порядке, файл нужно сперва отсортировать.
Нам
уже известно, что перенаправлением |