Ответы:
Трубопровод положит стандартный cat foo
вывод к стандартному some_program
. В этом случае some_program
ожидается аргумент, а не stdin, поэтому вы захотите сохранить cat foo
результат в переменной и затем вызвать some_program $variable
.
Я не слишком уверен в сценарии Bash, но попробовать это?
bar=`cat foo`
some_program $bar
На самом деле, может быть, это будет работать ...
some_program `cat foo`
В Bash вы можете использовать процесс подстановки
$ some_program <(cat foo)
Таким образом, вы можете добавить столько параметров, сколько захотите, если вы знаете, что эти параметры будут именами файлов, которые будут доступны только для чтения. Вы не можете читать и писать одновременно.
Помимо способа, предложенного @Bob, есть еще один, более гибкий метод xargs
:
Вы могли бы использовать
cat foo | xargs some_program
который в основном эквивалентен
some_program `cat foo`
Если программа ожидает только один аргумент за раз, вы можете сделать
cat foo | xargs -n 1 some_program
И some_program
будет вызван один раз для каждой строки ввода.
Есть много других опций xargs
, таких как тщательная обработка «плохих» имен файлов (с пробелами и другими специальными символами), ограничение количества одновременно запущенных процессов и т. Д., Которые можно найти на странице руководства.