2013-03-28 6 views
5

tee считывает со стандартного ввода и записывает на стандартный вывод и файл.tee в сжатый файл

some_command |& tee log 

Возможно ли, чтобы tee записывал в сжатый файл?

some_command |& tee -some_option log.bz2 

Если тройник не может этого сделать, есть ли какая-либо другая команда?

можно перенаправить вывод в сжатый файл с

some_command |& bzip2 > log.bz2 

Но с помощью этой команды, выход на стандартный вывод отсутствует.

ответ

4

Если вы в порядке с вашей выход на поток ошибок, вы можете перенаправить его:

some_command | tee /dev/stderr | bzip2 > log.bz2 

Это тройники вывод на стандартный вывод как и стандартный поток ошибок (| tee /dev/stderr). Затем трубы стандартный вывод в bzip2 (| bzip2 > log.bz2)

+0

Окончательный '2> & 1' означает, что любые сообщения об ошибках, сгенерированные' bzip2', записываются в его выходной файл 'log.bz2'. Просто отбросьте это перенаправление, и все упомянули об этом, и вы будете в бизнесе. –

+0

Хм, хороший звонок. – craig65535

4

Если оболочка bash (версия 4.x), у вас есть 'process substitution', и вы могли бы использовать:

some_command 2>&1 | tee >(bzip2 -c > log.bz2) 

Это перенаправляет стандартные ошибки и стандартный вывод tee (как |&., Но я предпочитаю классическую нотацию). Копия результата tee отправляется процессу вместо файла; процесс равен bzip2 -c > log.bz2, который записывает свой стандартный ввод в сжатом формате в стандартный вывод. Конечно, другая (несжатая) копия выводится прямо на стандартный вывод.

Смежные вопросы