回答:
場合は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 filenamefifoという名前(POSIXの方法)
mkfifo foo
program1 >foo & # in background
program2 -in foo -out filename
rm fifo通常は標準入力を使用しない多くのプログラムは、理由によりこのように動作します。入力ファイルがシーク可能である必要があることに注意してください。では<bar program2、あなたがのファイルディスクリプタ0にすることができprogram2にポイントをbarシーク可能ですが、一般の標準入力にファイルシーク可能ではないので、このようなプログラムは、それを使用して気にしないでください。上記の各方法では、ファイルがシーク可能であると予想される場合、プログラムが失敗する可能性があります。
次のようなことができます
program1 > stdin & program2 -in stdin -out filename
これは実際にはパイプではありませんが、program1のすべてのstdoutをstdinファイル内に入れて、program2が読み取れるようにします。
あるいは、一部のプログラムは、シェルからの読み取り/書き込みを試みるときに、短縮表記を使用します。したがって、次のようになります。
program1 | program2 -in - -out filename
次の構文は、入力ファイルを特殊ファイルにポイントすることにより、シェルで動作するはずです/dev/stdin。
program1 | program2 -in /dev/stdin -out filename