Bash の exec 組み込みドキュメントでは、次の点を考慮してください。
execは新しいプロセスを作成せずにシェルを置き換えます。
使用事例/実際の事例を提供してください。私はこれが何を意味するのかわかりません。
Googleで調べたものはI/O リダイレクト。もっとよく説明できますか?
ベストアンサー1
exec
シェルスクリプトでは、主に他のバイナリを実行するためのラッパーとして使用されることがよくあります。たとえば、
#!/bin/sh
if stuff;
EXTRA_OPTIONS="-x -y -z"
else
EXTRA_OPTIONS="-a foo"
fi
exec /usr/local/bin/the.real.binary $EXTRA_OPTIONS "$@"
これにより、ラッパーの実行が完了した後に「実際の」バイナリが引き継がれ、プロセステーブルで同じスロットを一時的に占有していたラッパースクリプトの痕跡が残りなくなります。 「本当の」バイナリは、それを始めたものの直系の子孫であり、孫ではありません。
あなたの質問でI / Oリダイレクトについても言及しました。これはまったく異なるユースケースであり、exec
シェルを別のプロセスに置き換えることとは関係ありません。exec
次のようなパラメータがない場合:
exec 3>>/tmp/logfile
これにより、コマンドラインからのI / Oリダイレクトが現在のシェルプロセスに適用されますが、現在のシェルプロセスは引き続き実行され、スクリプトの次のコマンドに進みます。