web-dev-qa-db-ja.com

bash '<(file contents)'構文は何と呼ばれますか?

この Security StackExchangeの回答 は、興味深いbash構文を使用してインラインでファイルを生成します。

openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name secp384r1) -keyout cert.key -out cert.crt -days 3650

このビットは特に興味深いものです。

<(openssl ecparam -name secp384r1)

ただ実行する:

echo <(openssl ecparam -name secp384r1)

戻る/dev/fd/63

したがって、これはファイルの内容を含む一時ファイル記述子を作成するようです。

これは何と呼ばれますか?

25
mikemaccana

これは プロセス置換 と呼ばれ、bash、zsh、およびksh(およびおそらく他のもの、私にはわかりません)の機能です。これはPOSIXではないため、移植可能なコードでは使用しないでください。ただし、非常に便利です。

Bashマニュアルの関連セクションは次のとおりです。

3.5.6プロセス置換

プロセス置換は、名前付きパイプ(FIFO)または/ dev/fdメソッドでオープンファイルに名前を付けることをサポートするシステムでサポートされています。それは

  <(list) 

または

  >(list) 

プロセスリストは、入力または出力がFIFOまたは/ dev/fd内のファイルに接続された状態で実行されます。このファイルの名前は、次の結果として現在のコマンドに引数として渡されます。 >(list)フォームが使用されている場合、ファイルへの書き込みはリストの入力を提供します。<(list)フォームが使用されている場合、引数として渡されたファイルを読み取り、listの出力を取得する必要があります。 <または>と左括弧の間にスペースを入れないでください。スペースを入れないと、構成がリダイレクトとして解釈されます。

使用可能な場合、プロセス置換は、パラメーターと変数の拡張、コマンド置換、および算術拡張と同時に実行されます。

35
terdon