Help us understand the problem. What is going on with this article?

シェルスクリプト exec コマンド

exec コマンドを使うと、同じプロセス内で外部コマンドが実行される。
用途として考えられるのは、もしラッパースクリプトを作って別のスクリプトを呼び出す必要がある場合、ラッパースクリプトから exec を使って別のスクリプトを呼び出すようにすれば、余分なプロセスを作成しないで済む。

exec コマンドを使わない場合
example1
$ ls

例えば、今のプロセスIDが500だとする。
何らかの外部コマンド(lsなど)を実行する前、まず新しいプロセスID(例えば、501)が生成される。
そして新しいプロセスID(501)で、ls コマンドが実行される。

exec コマンドを使う場合
example2
$ exec ls

例えば、今のプロセスIDが500だとする。
何らかの外部コマンド(lsなど)を exec コマンドを用いて実行すると、元のプロセスID 500 内で ls コマンドが実行される。

標準出力をリダイレクトする

exec > output のように実行すると、それ以降実行されるコマンドの標準出力については、output ファイルにリダイレクトされる。
元に戻すためには、exec > /dev/tty を実行する。

example3
$ exec > output
$ pwd
$ exec > /dev/tty  # シェルの標準出力先を画面に戻す
$ pwd
/home/blueskyarea
cat output
/home/blueskyarea
環境変数をすべて削除して実行する

exec env - scriptA で呼び出された scriptA はすべての環境変数が削除された状態で実行される。
※ bash では exec -c scriptA で同様の動きになる

example4
export MY_ENV=my-env
echo "${MY_ENV}" # my-env
echo "${LANGUAGE}" # en_US:
exec env - ./other-script.sh # "${MY_ENV}" や "${LANGUAGE}" などを参照しても空
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away