回答:
場合は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
シーク可能ですが、一般の標準入力にファイルシーク可能ではないので、このようなプログラムは、それを使用して気にしないでください。上記の各方法では、ファイルがシーク可能であると予想される場合、プログラムが失敗する可能性があります。
次のようなことができます
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