mkfifo
Вы можете сделать так, чтобы ваша первая программа записывала в fifo (именованный канал) вместо обычного файла, затем вы можете обрабатывать вывод так, как вам нравится, как в обычном канале:
mkfifo out
prgram1 -O out | filter_program < out > file
rm out
Например, с помощью wget в качестве prgram1 вы можете сделать:
wget -qO out 'superuser.com' | grep '<title>' out
|
просто служит для запуска обеих команд одновременно, сам канал не используется.
Программа должна записывать файл последовательно, чтобы это работало. Если это нужно переместить файл, который не будет делать.
Редактировать: Это не работает, если программа удаляет выходной файл перед записью.
Нам нужно больше хитрости тогда. Как насчет того, чтобы позволить программе писать, но не удалять файл :
$ prg1() { rm out; wget -qO out 'superuser.com'; }
$ mkfifo out
$ chmod 500 .
$ prg1 | grep '<title>' out
Это должно работать, пока программа не слишком суетливая и не выдает ошибку при неудачном удалении.