2015-09-11 5 views
1

Я пытаюсь объединить две программы вместе. Первая программа, которую я могу изменить, как я хочу, генерирует вывод с некоторыми данными. Вторая программа не может быть изменена и ожидает чтения данных, которые генерируются первой программой.создание фальшивого файла, который показывает вывод программы

Эта вторая программа выдает файл, я не могу использовать канал. Я не хочу регенерировать файл каждые х секунд.

Есть ли способ на linux создать «поддельный» файл, который извлекает первый вывод программы каждый раз, когда он открывается для чтения? Это будет прозрачно для второй программы. Это возможно с предохранителем?

ответ

2

Если вы используете bash, вы можете use process substitution:

program2 <(program1) 

Если вы не используете оболочку с замещением процесса, вы можете использовать именованный канал.

mkfifo /tmp/pipe 
program1 > /tmp/pipe & 
program2 /tmp/pipe 

Многие программы, которые требуют имя файла аргумент для их ввода также допускают, что имя файла будет -, которые они интерпретируют означает стандартный ввод. Это позволяет вам трубить к ним:

program1 | program2 - 
+0

Ничего себе, не знал об этой команде 'mkfifo', аккуратной! –