Перенаправления

Перенаправление стандартного вывода

Для перенаправления стандартного вывода программы при её запуске используется символ >. Например, если необходимо, что бы список файлов, выводимый программой ls, попадал не на экран, а в файл с именем list, следует выполнить такую команду:

$ ls > list
$

Если файла list не было, он будет создан. Если файл list существовал, предыдущие данные будут потеряны и заменены на список файлов.

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

$ ls >> list
$

Стандартный вывод перенаправляется только у той программы, у которой при запуске использовались символы перенаправления. На другие программы, запускаемые позже, это не распространяется.

Перенаправление стандартного вывода ошибки

Стандартный вывод ошибки — это файл с индексным дескриптором 2. Поэтому, для его перенаправления в файл используются те же самые символы, что и в случае перенаправления стандартного вывода, но с явным указанием номера дескриптора.

$ ls 2> file
$ ls 2>> file

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

$ cat nofile
cat: nofile: No such file or directory
$

Если Вы хотите, что бы при работе программы сообщения об ошибке не выводились на экран терминала, перенаправьте стандартный вывод ошибки в файл. Как вариант, вместо имени файла можно использовать специальное устройство /dev/null.

$ cat nofile 2> /dev/null
$

Устройство /dev/null предназначено для потери информации, то есть любая информация, записываемая в этот файл, пропадает. Читать из этого файла не имеет смысла, т.к. сразу возвращается символ EOF.

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

$ cat file1 file2 2>&1 > /dev/null
$

Перенаправление стандартного ввода

Для перенаправления стандартного ввода программы используют специальный символ <. Например:

$ cat < file

Программа cat выводит на экран содержимое файла file. Пример не очень удачный, этого можно добиться выполнив просто:

$ cat file

Но в первом примере программа не открывает файл file, это делает система и передаёт содержимое файла на стандартный ввод. Во втором примере, файл file открывает сама cat, явно используя функцию open.