Если 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
вы можете сделать так, чтобы дескриптор файла 0 program2
указывал на файл bar
который можно найти, но, как правило, stdin не доступен для поиска, поэтому такие программы не будут его использовать. Каждый из вышеперечисленных методов может привести к сбою вашей программы, если он ожидает, что файл будет доступен для поиска.