====== Командная строка. Потоки, программные каналы и перенаправления ====== ---- ===== Стандартные потоки ввода / вывода ===== **Стандартные потоки** — воображаемые файлы, позволяющие осуществлять взаимодействие с пользователем как чтение и запись в файл. Кроме потоков ввода и вывода, существует еще и стандартный поток ошибок, на который выводятся все сообщения об ошибках и те информативные сообщения о ходе работы программы, которые не могут быть выведены в стандартный поток вывода. ^ Дескриптор ^ Название ^ Описание ^ | **0** | stdin | Стандартный ввод | | **1** | stdout | Стандартный вывод | | **2** | stderr | Стандартный вывод ошибок | ---- ===== Паренаправление в / из стандартных потоков ===== ^ Команда ^ Описание ^ | %%<%% //файл// | Использовать файл как источник данных для стандартного потока ввода. | | %%>%% //файл// | Направить стандартный поток вывода в файл. Если файл не существует, он будет создан; если существует — перезаписан сверху. | | %%2>%% //файл// | Направить стандартный поток ошибок в файл. Если файл не существует, он будет создан; если существует — перезаписан сверху. | | %%>>%% //файл// | Направить стандартный поток вывода в файл. Если файл не существует, он будет создан; если существует — данные будут дописаны к нему в конец. | | %%2>>%% //файл// | Направить стандартный поток ошибок в файл. Если файл не существует, он будет создан; если существует — данные будут дописаны к нему в конец. | | %%&>%% //файл или// %%>&%% //файл// | Направить стандартный поток вывода и стандартный поток ошибок в файл. Другая форма записи: >файл 2>&1. | | %%>&-%% | Закрыть поток вывода перед вызовом команды; | | %%2>&-%% | Закрыть поток ошибок перед вызовом команды; | | cat %%< | Весь текст между блоками EOF (в общем случае вместо EOF можно использовать любое слово) будет выведен на экран. Важно: перед последним EOF не должно быть пробелов! (heredoc синтаксис). | ---- ===== Каналы ===== Стандартные потоки можно перенаправлять не только в файлы, но и на вход других программ. Если поток вывода одной программы соединить с потоком ввода другой программы, получится конструкция, называемая **каналом**, **конвейером** или **пайпом** (от англ. pipe, труба). \\ В bash канал выглядит как последовательность команд, отделенных друг от друга символом |: команда1 | команда2 | команда3 ...