Если program2
он не использует свой стандартный ввод и -in
является единственным способом указать входной файл, это полезные параметры:
/proc/self/fd/0
или /proc/fd/0
(если доступно; функция ядра, не требуется POSIX)
program1 | program2 -in /proc/self/fd/0 -out filename
Подстановка процессов (поддерживается в Bash и некоторых других оболочках, не требуется POSIX)
program2 -in <(program1) -out filename
Названный fifo (способ POSIX)
mkfifo foo
program1 >foo & # in background
program2 -in foo -out filename
rm fifo
Обратите внимание, что многие программы, которые обычно не используют свой стандартный ввод, ведут себя так по причине: им нужен входной файл для поиска. С помощью него <bar program2
вы можете program2
указать дескриптор файла 0, указывающий на bar
файл, который можно искать, но в целом stdin не доступен для поиска, поэтому такие программы не беспокоятся об его использовании. Каждый из вышеперечисленных методов может привести к сбою вашей программы, если он ожидает, что файл будет доступен для поиска.