exec – コマンドを現在のシェル環境で実行するシェル組み込みコマンド

コマンドリファレンス

exec は、新しいプロセスを作らずに、現在のシェル環境で指定したコマンドを実行する シェルの組み込みコマンドです。
通常のコマンド実行と異なり、exec を使うと現在のシェルプロセスが置き換えられるため、終了後にシェルに戻りません。
また、引数なしで使うと ファイルディスクリプタのリダイレクト に利用できます。

構文(Syntax)

exec [コマンド [引数...]]
exec <リダイレクト>

主な用途

用途説明使用例
コマンド実行シェルを置き換えて実行exec /bin/bash
スクリプト最適化プロセスを余分に作らず効率的に実行exec myscript.sh
ファイルディスクリプタ操作出力や入力をリダイレクトexec > logfile.txt
FD クローズ不要な FD を閉じるexec 3>&-

実行例

シェルを新しい bash に置き換える

exec /bin/bash

(元のシェルに戻れなくなり、終了するとログアウトする)

スクリプト内でコマンドを実行(プロセスを増やさない)

#!/bin/bash
echo "Before exec"
exec ls -l
echo "This line will never be executed"

出力例:

total 0
-rw-r--r-- 1 user user 0 Aug 21 15:20 file.txt

exec の後の行は実行されない)

出力をファイルにリダイレクト

exec > output.log
echo "ログに書き込み"

output.log の内容:

ログに書き込み

標準入力を別ファイルに切り替える

exec < input.txt
while read line; do echo "行: $line"; done

FD を閉じる

exec 3>&-

(ファイルディスクリプタ 3 を閉じる)

エラー例(存在しないコマンドを指定)

exec notfound

出力例:

bash: exec: notfound: not found

(この場合はシェルは終了せずエラーだけ返す)

関連コマンド / 構文

  • source : シェルを置き換えずにスクリプトを読み込む
  • . (ドットコマンド) : source と同義
  • exit : シェルを終了

備考

  • exec外部コマンドではなくシェル組み込み です。which exec では場所は出ません。
  • プログラムのラッパースクリプトで使うと、余計なプロセスを残さず実行できる利点があります。
  • リダイレクト専用で使うケースも多く、exec > logfile とするとその後の出力はすべてファイルに記録されます。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント