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