Обычная команда tar
tar cvf foo.tar ./foo >foo.out 2>foo.err
имеет три выходных потока ввода-вывода
- архивировать данные на foo.tar
- список имен файлов для STDOUT (перенаправляется в foo.out)
- сообщения об ошибках в STDERR (перенаправлены в foo.err)
Затем я могу проверить foo.err на наличие сообщений об ошибках, не просматривая список имен файлов.
если я хочу что-то сделать с архивными данными (передать через netcat или специальную программу сжатия), я могу использовать -f -
опцию tar таким образом
tar cvf - ./foo 2>foo.err | squish > foo.tar.S
Но теперь мой список имен файлов смешан с моими сообщениями об ошибках, потому что -v
вывод tar, очевидно, не может идти в STDOUT (туда, куда поступают архивные данные), поэтому tar ловко записывает это вместо этого в STDERR.
Используя оболочку Korn, есть способ создать команду, которая передает поток архива в другую команду, но при этом сохраняет -v
выходные данные отдельно от любых сообщений об ошибках.
tee
? Это похоже на вполне допустимый вариант использования.