これは複数の標準入力ではありません。これは「プロセスの代用」と呼ばれるバッシュ主義ですhttp://tldp.org/LDP/abs/html/process-sub.html
疑似ファイル (/dev/fd/something
) を作成します。 ) 置換ごとに。それはかなり便利です。このコマンドはストリームとしてのみ読み取ることができます。つまり、fseek で行ったり来たりすることはできません。パイプのように、バイトのストリームとして読み取る必要があります。
ボーナス回答
これを使用するために多くのことをする必要はありません。スクリプトに関する限り、コマンドラインで有効なファイル名を取得し、他のものと同じように open() できます。他の人が言ったように、 diff /dev/fd/XX /dev/fd/YY
が表示されます .これらの疑似ファイルのいずれかで stat() を実行すると、それが名前付きパイプであることがわかります。パイプ セマンティクスで処理する必要があります。つまり、fseek() や ftell() は使用しません。ファイルかどうかを明示的に確認するために stat() テストを実行すると (例:[ -f $1 ]
) これはする break - 結局、これは名前付きパイプとして実装されます。
<(...)
プロセス置換を行います バッシュで。括弧内のプロセスの出力は、通常の 3 を超える追加のファイル記述子に送信され、そのファイル記述子に対応するファイル名が返されます。このようにして、コマンドの出力を別のコマンドに渡すファイル名として扱うことができます。
stdin
が 1 つあります と 1 つの stdout
プロセスごと .通常は端末に接続されていますが、個別にリダイレクトできます。
この例では、2 つの wget
があります。 関連するプロセスで、それぞれが独自の stdin
を取得します と stdout
.各 wget
プロセスは -
に書き込みます 、これはその stdout
です .次に bash
のプロセス置換 <(...)
stdout
を接続します diff
から一意の疑似ファイルへのプロセスの 読める。 2 つのプロセス置換により、2 つの異なる疑似ファイルが生成されることに注意してください! したがって、diff
次のようなものが表示されます:
diff /dev/fd/XX /dev/fd/YY
stdout
wget -q -O - URL1
の /dev/fd/XX
に接続されています 、および stdout
wget -q -O - URL2
の /dev/fd/YY
へ .