Это обычная ситуация: вы хотите включить команду '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