Звичайна команда 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
? Це здається досить вагомим випадком використання для цього.