суббота, 24 июля 2010 г.

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

Три потока, три пути, выбирай куда идти... Это я про stdin, stdout, stderr.

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

А все потому, что при компиляции/сборке генерируются два типа выражений - просто output и ошибки. Первые идут в stdout, вторые - в stderr. Поскольку оба потока по умолчанию связаны с экраном, юзер их не всегда и различает. А когда начинаем перенаправлять - тут отличия и всплывают. Значок > перенаправляет только stdout. А вот комбинация >& перенаправит в файл и stdout, и stderr.

Узелок на память - список операторов перенаправления:
операция > файл - перенаправляет все сообщения stdout в файл;
операция >& файл - перенаправляет все сообщения stdout и stderr в файл;
операция < файл - перенаправление stdin, операция возьмет на вход содержимое файла;
операция >> файл - сообщения из stdout будут дописываться в конец файла (append).

Все это работает и в Windows и в Unix.

Комментариев нет: