$ cat foo
foo
bar
Теперь, если я сделаю:
$ some_program foo
Работает.
Но если я попробую:
$ cat foo | some_program
Это не работает.
Я ищу чистый способ передачи ввода some_program
без использования грязных временных файлов.
command-line
bash
zsh
pipe
ms123
источник
источник
В Bash вы можете использовать процесс подстановки
Таким образом, вы можете добавить столько параметров, сколько захотите, если вы знаете, что эти параметры будут именами файлов, которые будут доступны только для чтения. Вы не можете читать и писать одновременно.
источник
Помимо способа, предложенного @Bob, есть еще один, более гибкий метод
xargs
:Вы могли бы использовать
который в основном эквивалентен
Если программа ожидает только один аргумент за раз, вы можете сделать
И
some_program
будет вызван один раз для каждой строки ввода.Есть много других опций
xargs
, таких как тщательная обработка «плохих» имен файлов (с пробелами и другими специальными символами), ограничение количества одновременно запущенных процессов и т. Д., Которые можно найти на странице руководства.источник