GNU/Linux >> Linux の 問題 >  >> Linux

<( cmd ) パターンは bash でどのように機能しますか?

これをプロセス代替と呼びます。

3.5.6 プロセス置換

<ブロック引用>

プロセス置換により、ファイル名を使用してプロセスの入力または出力を参照できます。

プロセス リストは非同期で実行され、その入力または出力はファイル名として表示されます。このファイル名は、展開の結果として現在のコマンドに引数として渡されます。>(list) 形式を使用すると、ファイルへの書き込みによって list の入力が提供されます。 <(list) 形式を使用する場合は、引数として渡されたファイルを読み取って list の出力を取得する必要があります。 <または> と左括弧の間にスペースを入れないでください。そうしないと、コンストラクトがリダイレクトとして解釈されます。プロセス置換は、名前付きパイプ (FIFO) または /dev/fd によるオープン ファイルの命名方法をサポートするシステムでサポートされています。

これはもともと ksh で登場した bash だけのものではありませんが、posix 標準にはありません。

<ブロック引用>

内部では、プロセス置換には 2 つの実装があります。 /dev/fd をサポートするシステム (ほとんどの Unix ライクなシステム) pipe( を呼び出すことで動作します ) ファイル記述子 $fd を返すシステム コール 新しい匿名パイプの場合、文字列 /dev/fd/$fd を作成します 、コマンドラインでそれを置き換えます。 /dev/fd のないシステムの場合 サポート、それは mkfifo を呼び出します 名前付きパイプを作成するための新しい一時ファイル名を使用して、コマンド ラインでこのファイル名を置き換えます。


<( somecommand ) を考えることができます somecommand の出力を含む一時ファイルのファイル名として .つまり、

utility < <( somecommand )

のショートカットです

somecommand >tempfile
utility <tempfile
rm -f tempfile

そして

utility <( somecommand )

のショートカットです

somecommand >tempfile
utility tempfile  # notice the lack of redirection here (utility expected to read from "tempfile")
rm -f tempfile

同様に >( somecommand ) somecommand に入力される一時ファイルのファイル名と考えることができます その標準入力で。つまり、

utility > >( somecommand )

のショートカットです

utility >tempfile
somecommand <tempfile
rm -f tempfile

そして

utility >( somecommand )

のショートカットになる可能性があります
mkfifo temppipe
somecommand <temppipe &
utility temppipe  # utility is expected to write to "temppipe"
rm -f temppipe

(または類似のもの)


Linux
  1. NGINXとは何ですか?それはどのように機能しますか?

  2. Awkの「!a [$ 0] ++」はどのように機能しますか?

  3. sudoの内部はどのように機能しますか?

  1. スティッキービットはどのように機能しますか?

  2. 「ls」コマンドは Linux/Unix でどのように機能しますか?

  3. cat << EOFはbashでどのように機能しますか?

  1. .bashrcの目的とそれはどのように機能しますか?

  2. Bashスクリプトでは、Continueコマンドは埋め込みループでどのように機能しますか?

  3. Ssh – Tcp-keepaliveはSshでどのように機能しますか?