Shell: перенаправление stdout и stderr

Автор: | 06/01/2016

terminalВ UNIX-системах имеется три файловых дескриптора- stdin, stdout и stderr (std == standard).

Используя их вы можете:

  1. перенаправить stdout в файл;
  2. перенаправить stderr в файл;
  3. перенаправить stdout в stderr;
  4. перенаправить stderr в stdout;
  5. перенаправить stderr и stdout в файл;
  6. перенаправить stderr и stdout в stdout;
  7. перенаправить stderr и stdout в stderr.

Для stdout используется дескриптор 1, а для stderr – 2.

stdout в файл

Что бы перенаправить выходные данные программы в файл:

$ ls -l > ls-l.txt

Тут ls-l.txt – это имя файла, который будет создан (если не существует, иначе – он будет перезаписан), и в который будут записаны данные, которые вы видите на экране, выполняя команду ls -l.

stderr в файл

Что бы перенаправить стандартный поток ошибок в файл – используйте:

$ grep da * 2> grep-errors.txt

В результате будет создан файл grep-errors.txt, который будет содержать в себе данные из stderr после выполнения grep da *.

stdout в stderr

Следующий пример перенаправит stdout в stderr:

$ grep da * 1>&2

stderr в stdout

И наоборот – что бы перенаправить stderr в stdout – используйте:

$ grep * 2>&1

stderr и stdout в file

Иногда требуется перенаправить все данные в файл. Это может пригодиться в cron-задачах, что бы команда выполнялась в полной “тишине”:

$ rm -f $(find / -name core) &> /dev/null

Ссылки по теме

http://tldp.org

http://www.cyberciti.biz