По умолчанию команды получают ввод из параметров, указываемых при вводе команды в командной строке, и направляют свой вывод, включая и сообщения об ошибках, на экран монитора. Однако, иногда возникают ситуации, в которых ввод нужно получить не с клавиатуры, а из какого-либо другого источника, а вывод направить в файл или на другое устройство вывода, например, на принтер. Кроме того, сообщения об ошибках иногда желательно направлять в файл, а не в окно консоли.
В bash есть встроенные файловые дескрипторы: 0 (stdin), 1 (stdout), 2 (stderr).
stdout — стандартный вывод программы.
stdin — стандартный ввод; то, что набирает пользователь в консоли.
stderr — стандартный вывод ошибок.
В Unix используются четыре способа перенаправления стандартных ввода и вывода.
1. Перенаправление стандартного вывода команды в файл.
2. Переназначение стандартного ввода команды с клавиатуры на файл.
3. Дописывание стандартного вывода команды в существующий файл.
4. Передача стандартного вывода одной команды в качестве стандартного ввода другой команды. Этот способ перенаправления ввода-вывода принято называть потоком.
Для перенаправления ввода и вывода используется синтаксис, представленный в таблице 3.1.
Назначение стандартного вывода команды1 в качестве стандартного ввода команды2
Команда < [путь]имя_файла
Ввод команды поступает из заданного файла
Команда > [путь]имя_файла
Вывод команды направляется в заданный файл. При этом если указанный файл не существует, то он создается, в противном случае – перезаписывается
Команда >> [путь]имя_файла
Вывод команды направляется в заданный файл. При этом если указанный файл не существует, то он создается, в противном случае вывод дописывается в конец файла
Команда < [путь]имя_файла1 > [путь]имя_файла2
Ввод команды поступает из первого заданного файла, а вывод направляется во второй с перезаписью
Команда < [путь]имя_файла1 >> [путь]имя_файла2
Ввод команды поступает из заданного первого заданного файла, а вывод дописывается во второй файл
Команда 2> [путь]имя_файла
Создается заданный файл, в который направляется вывод сообщений об ошибках. Если такой файл уже существует, то он перезаписывается
Команда 2>&1 [путь]имя_файла
Сообщения об ошибках и стандартный вывод записываются в один и тот же файл