プロセス置換コマンドはサブシェルから呼び出されますか?

プロセス置換コマンドはサブシェルから呼び出されますか?

バッシュマニュアルから

プロセスの置き換えサポート対象システムでサポート名前付きパイプ (fifos) または/dev/fdファイルを開く名前付きメソッドです。形を取る

<(list)

または

>(list)

プロセスリストの入力または出力はfifoまたはに接続されています/dev/fd。ファイル名は、拡張結果として現在のコマンドに引数として渡されます。

コマンドはlistプロセスオーバーライドで呼び出されますか、または<(list)コマンド>(list)オーバーライド、角かっこグループコマンド、および非同期コマンドなどのサブシェルから呼び出されますか? bashのマニュアルで言うのと似ています。

コマンドの置換、括弧で囲まれたコマンド、および非同期コマンドは次のとおりです。サブシェル環境で呼び出されたこれは、シェルがキャッチしたトラップが呼び出し時にシェルが親シェルから継承された値にリセットされることを除いて、シェル環境のコピーです。

  1. 答えはおそらく「はい」です。なぜなら

    • プロセス置換はコマンド置換と似ています。

    • 一部のソース説明する

      ここに含まれるコマンドはバックグラウンドで実行されます。

    上記のbashマニュアルの2番目の文は、コマンド置換とバックグラウンドコマンドがサブシェルから呼び出されることを意味します。

  2. 答えはおそらく「いいえ」です。なぜなら

    • Bashのマニュアルでは、上記のBashのマニュアルの2番目の引用に記載されているプロセスの置き換えを見ることはできません。

    • そして一部のソースプロセス置換について話す

      これはパイプバイパスによって引き起こされるサブシェルにとって特に重要です。

      「サブシェルバ​​イパス」がサブシェルを呼び出さないことを意味するかどうかはわかりません。

ベストアンサー1

現在のシェルを実行しstrace(1)た後に実行すると、次のように <(command)なります。

クローン (child_stack = 0, フラグ = CLONE_CHILD_CLEARTID | CLONE_CHILD_SETTID | SIGCHLD, child_tidptr = 0x7fa6713d59d0) = 13305

純粋に正義的な観点から、クローン(2)~として定義された

子プロセスの作成

そしてサブシェル〜のように

シェルスクリプトを実行すると、サブシェルと呼ばれる新しいプロセスが開始されます。

はいと言うこともできます。実行中のプロセスは、サブシェルが呼び出されると置き換えられます。

おすすめ記事