Шрифт:
За исключением оболочки C-shell и небольшого числа ее производных все перечисленные оболочки очень похожи и очень близки к оболочке, определенной в спецификациях Х/Оpen 4.2 и POSIX 1003.2. В спецификации POSIX 1003.2 задан минимум, необходимый для создания командной оболочки, а в спецификации Х/Open представлена более дружественная и мощная оболочка.
Каналы и перенаправление
Прежде чем заняться подробностями программ командной оболочки, необходимо сказать несколько слов о возможностях перенаправления ввода и вывода программ (не только программ командной оболочки) в ОС Linux.
Перенаправление вывода
Возможно, вы уже знакомы с некоторыми видами перенаправления, например, таким как:
сохраняющим вывод команды ls в файле с именем lsoutput.txt.
Однако перенаправление позволяет сделать гораздо больше, чем демонстрирует этот простой пример. В главе 3 вы узнаете больше о дескрипторах стандартных файлов, а сейчас вам нужно знать только то, что дескриптор файла 0 соответствует стандартному вводу программы, дескриптор файла 1 — стандартному выводу, а дескриптор файла 2 — стандартному потоку ошибок. Каждый из этих файлов можно перенаправлять независимо друг от друга. На самом деле можно перенаправлять и другие дескрипторы файлов, но, как правило, нет нужды перенаправлять любые другие дескрипторы, кроме стандартных: 0, 1 и 2.
В предыдущем примере стандартный вывод перенаправлен в файл с помощью оператора
Для дозаписи в конец файла используйте оператор
добавит вывод команды
Для перенаправления стандартного потока ошибок перед оператором
Предположим, что вы хотите применить команду
Команда
поместит вывод и информацию об ошибке в разные файлы.
Если вы предпочитаете собрать оба набора выводимых данных в одном файле, можно применить оператор
поместит свой вывод и стандартный поток ошибок в один и тот же файл. Обратите внимание на порядок следования операторов. Приведенный пример читается как "перенаправить стандартный вывод в файл killerr.txt, а затем перенаправить стандартный поток ошибок туда же, куда и стандартный вывод". Если вы нарушите порядок, перенаправление выполнится не так, как вы ожидаете.
Поскольку обнаружить результат выполнения команды
Перенаправление ввода
Также как вывод вы можете перенаправить ввод. Например,
Понятно, что это тривиальнейший пример для ОС Linux; команда
Каналы
Вы можете соединять процессы с помощью оператора канала (
Если не применять каналы, придется использовать несколько шагов, подобных следующим: