Назад | Перейти на главную страницу

Обертка Unix, чтобы любой двоичный файл принимал перенаправление stdin / stdout

Это обычная ситуация: вы хотите включить команду 'foo' как часть конвейера, но, к сожалению, команда 'foo' принимает только фактические имена файлов для ввода-вывода и не читает / записывает из stdin / stdout. Я знаю, что есть команда Unix, которая действует как оболочка для некорректных команд, таких как 'foo', но я не могу вспомнить ее имя. Что это?

Предполагая foo использует -i для входного файла и -o для выходного, это должно преобразовать его в программу, подходящую для конвейера:

previousCommand | foo -i <(cat) -o >(cat) | nextCommand

Это называется подстановкой процесса и, хотя и не является стандартным, доступно как минимум для ksh и bash.

В простых случаях, подобных предыдущему примеру, конвейер можно сократить следующим образом:

foo -i <(previousCommand) -o >(nextCommand)

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

Пример:

mkfifo mypipe
perl mypipe & # awaits input from pipe file
echo "print 55;" > mypipe

ls -l mypipe # should be prefixed with a p denoting the inode is a pipe:
prw-r--r-- 1 user1 user1 0 Apr 18 12:10 mypipe