Перенаправление ввода-вывода

В Bash реализована возможность перенаправления потоков ввода и вывода. Что это значит?

В стандартный поток ввода поступают данные, которые вводятся с клавиатуры. Стандартным потоком вывода является экран монитора. Другими словами, в командную строку Bash'а поступают данные, вводимые с клавиатуры. Если команда предполагается текстовый вывод, Bash выводит данные на экран.

Однако такое поведение по-умолчанию можно изменить. Данные могут поступать, например, из файла, а не с клавиатуры. Аналогично, они могут выводиться в файл, а не на экран.

Предположим, мы хотим, не выходя из терминала в графический режим, записать в файл заметку. Для этого не обязательно использовать консольный текстовый редактор. Это можно сделать с помощью программы cat, перенаправив ее вывод в файл. Вспомним, что cat без аргументов работает в интерактивном режиме, и все, что мы вводим, тут же выводится на экран.

Перенаправление вывода в файл

В Bash знак больше ">" обозначает перенаправление стандартного потока вывода. В данном случае в файл. То есть cat по-умолчанию выводит данные на экран, но поскольку они были перенаправлены, то данные на экран выводиться не будут. На экране видны только вводимые строки, выводимые оказываются в файле.

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

Дописывание в файл

Два знака больше ">>" – это тоже перенаправление вывода, но такое, когда данные добавляются в конец объекта (в данном случае файла), если он существует. Используй мы только один знак больше, файл был бы перезаписан.

На скрине выше командой cat note.txt файл читается. Так устроена команда cat, что если ей передается аргумент, то она не будет работать в интерактивном режиме, а возьмет данные из указанного файла и выведет их на экран. Поэтому это равносильно cat < note.txt, где знак меньше "<" обозначает перенаправление ввода.

Можно было бы ожидать, что если команде ls, которая выводит содержимое каталога, передать файл, содержащий адрес каталога, то она выведет объекты этого каталога. Однако это не так.

Ввод из файла

Такое перенаправление не работает. А там где "работает" можно обойтись и без него, то есть команда сама "знает", что если передается имя файла, или она употребима только с именем файла, то данные надо брать из него.

Команды grep, wc, sort

Здесь команда grep ищет первый аргумент во втором. Если находит, возвращает строку с ним. Программа wc считает количество строк, слов и символов в файле. С помощью sort строки сортируются.

Когда же все же требуется выполнить список заранее подготовленных команд, то их записывают в файл и делают его исполняемым.

С другой стороны, выводы в файл команд ls и других работают.

Перенаправление вывода команды ls в файл

Создано

Обновлено