Перенаправление потоков данных

Оболочка управляет вводом и выводом запускаемых команд. Обычно, выделяют три потока данных это ввод, вывод и поток ошибок (stdin, stdout, stderr).

По умолчанию, оболочка направляет стандартный вывод на экран. Например, при использовании команды grep на файл, который содержит, какие-то данные, результат будет выведен на экран.

Перенаправление вывода команды в другую команду.

Для перенаправления потока вывода с одной команды в другой в оболочке используется вертикальная черта ‘|’. Например, чтобы отсортировать строки в нашем файле в алфавитном порядке, можем перенаправить вывод команды cat в команду sort.

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

Для перенаправления вывода команды в файл, используется функция оболочки, называемая перенаправлением вывода (output rederection). Просто добавьте символ «>» с именем файла, в который будет перенаправлен вывод:

Весь вывод был направлен в файл alias.txt. Если файла куда перенаправляется поток не существует, то он будет создан. Если же он есть, то его содержимое будет перезаписано.

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

Перенаправление ввода.

Кроме перенаправление вывода, есть возможность перенаправления ввода (input redirection), обеспечивающее стандартный ввод из файла, а не, например, с клавиатуры или сканера. Для такого перенаправления используется символ «<» и имя файла, чтобы перенаправить стандартный ввод.

Возьмем к примеру команду wc, которая подсчитывает количество строк, слов и символов в файле. И передадим ей на ввод наш файл

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

Перенаправление потока ошибок.

Некоторые сообщения, которые мы видим на экране в результате выполнения команд, нельзя перенаправить с помощью «>«. Например, выполним какую-нибудь операцию с несуществующим файлом

Если мы перенаправим это сообщение с помощью стандартного оператора «>«, то сообщение все равно будет выведено на экран. А файл errors все равно останется пустым.

Команды Linux могут создавать более одного потока вывода. Так вот в дополнению к потоку вывода есть еще и поток вывода ошибок (stderr). Этот поток обычно зарезервирован для сообщений об ошибках. Хоть и попадалось как-то, когда вывод версии приложения отправлялся именно в этот поток.

Оба потока — stdout и stderr на экране одинаково, но по своей сути они разные. И для того, чтобы перенаправить поток ошибок можно с помощью символов «2>«.

Либо вариант с записью сообщений об ошибках в конец файла: «2>>«.

А еще можно перенаправить все потоки вывода одним оператором «&>«.

Was this helpful?

0 / 0

Добавить комментарий 0