次のうち、現在シェルの同じプロセスで実行されているコードは何ですか?

次のうち、現在シェルの同じプロセスで実行されているコードは何ですか?

ㅏ。{ echo "Hello World"; } >outputfile

雨。( echo "Hello World" ) >outputfile

氏。./anothershell.sh

ディ。/bin/echo "Hello World"

どちらが正しいですか?そして、現在のシェルの同じプロセスでどのようなコマンドを実行できますか?

答え1

現在、シェルプロセス内ではAのみが実行されます。

paranehtese を使用してサブシェルを要求したため、B はサブシェルで実行されます。

C と D はどちらも外部コマンドの呼び出しであるため、現在のシェルプロセスの外部で実行されます。

答え2

あなたはこれをどのように証明できるかを何度も尋ねました。環境変数設定をプローブとして使用します。

export testvar=nope
{ echo "Hello World"; export testvar=yep; } >outputfile
printenv testvar

書くyep

export testvar=nope
( echo "Hello World"; export testvar=yep; ) >outputfile
printenv testvar

書くnope

(C)のスクリプトを編集し、(D)用に変更されたエコーをコンパイルする必要がありますが、その設定も作成されますnopeグレンジャックマンケースコメント(E)同じプロセスで実行します。

答え3

あなたが見逃すことができる1つの違いは、Bが分岐することです(したがって別のプロセスです)、実際には実行されないことです(同じシェルのコピーなので、/ bin / shを見つけずにinitプログラムETCを再実行しません)。 。そして特別な規則があります(例えば、$$は元のシェルのpidです)。

関連情報