Другой способ (при условии, что оболочка типа bash
или zsh
):
echo "hey hey, we're the monkees" | tee >(gzip --stdout > my_log.gz)
заведомо странный синтаксис >()
в основном делает следующее:
- Создать новый FIFO (обычно что-то в
/tmp/
)
- Выполните команду внутри
()
и привяжите FIFO к stdin этой подкоманды
- Возвращает имя файла FIFO в командную строку.
То, что tee
в конечном итоге видит, это что-то вроде:
tee /tmp/arjhaiX4
Все gzip
видит его стандартный ввод.
Для Bash см. man bash
для деталей. Это в разделе перенаправление . Для Zsh см. man zshexpn
под заголовком «Замена процесса».
Насколько я могу судить, оболочка Korn, варианты классической оболочки Bourne (включая пепел и тире) и оболочка C не поддерживают этот синтаксис.