GNU/Linux >> Linux の 問題 >  >> Linux

Linux exec コマンドと例

はじめに

Linux exec コマンドは、新しいプロセスを作成せずにシェル コマンドを実行します。代わりに、現在開いているシェル操作を置き換えます。コマンドの使い方に応じて、exec さまざまな動作とユース ケースがあります。

この記事では、exec の使用方法を示します。 Linux のコマンド。

前提条件

  • sudo としてのコマンドライン/ターミナルへのアクセス
  • Linux ターミナル コマンドの基本的な理解 (Linux コマンド チート シートを使用)
  • nano などの Linux テキスト エディタ

Linux exec コマンドの構文

exec コマンド構文は次のとおりです:

exec [options] [command [arguments]] [redirection]

このコマンドは、引数の数によって異なる動作をします:

  • 引数が存在する場合、exec コマンドは、現在のシェルを実行されたプログラムに置き換えます。 Bash スクリプトでは、以降のコマンドは実行されません .
  • コマンド引数が存在しない場合、すべてのリダイレクトは現在のシェルで行われます。

exec エラーが発生するか、コマンドがサブシェルで実行されない限り、コマンドが元のプロセスに戻ることはありません。

Linux exec コマンド オプション

以下はすべての exec の簡単な説明です オプション:

オプション 説明
-c 空の環境でコマンドを実行します。
-l ダッシュを渡します (- ) を 0 番目の引数として指定します。
-a [name] [name] を渡します ゼロ番目の引数として。

読み続けて exec がどのように機能するかを確認してください 例を通して働きます。

Linux exec コマンドの例

以下の例は、exec の動作を示しています。 ターミナルで、および Bash スクリプトを介してコマンドを実行します。

基本的な使い方 (プロセス置換)

exec の方法を確認するには 動作する場合は、次の手順を実行してください:

1. ターミナルを開き、実行中のプロセスを一覧表示します:

ps

出力には、現在実行中の Bash シェルと ps が表示されます 指図。 Bash シェルには一意の PID があります。

2. 確認するには、現在のプロセス ID を確認します:

echo $$

PID は ps からの出力と同じです コマンドで、これが現在実行中の Bash プロセスであることを示します。

3. exec を実行します sleep コマンドを 100 秒間渡します:

exec sleep 100

sleep コマンドは 100 秒間待機します。

4. 別のターミナル タブで、現在実行中のすべてのプロセスを一覧表示し、sleep を grep します。 コマンド:

ps -ae | grep sleep

プロセスの PID は Bash シェルの PID と同じで、exec を示します。 コマンドは Bash シェル プロセスを置き換えました。

100 秒が経過すると Bash セッション (端末タブ) が閉じ、プロセスが終了します。

現在のシェル セッションを置き換える

exec を使用します 現在のシェル セッションを置き換えるコマンド:

1. 現在のシェル PID を確認します:

echo $$

2. exec を使用 Bourne Shell に切り替えるには:

exec sh

3. 別のタブで、Bourne Shell プロセスの PID を確認します。

ps -ae | grep "\bsh\b"

注: \b grep sh の完全一致を可能にする、単語境界の一致のための Regex です。 出力で。詳細については、Grep Regex チュートリアルをご覧ください。

このコマンドは、Bash プロセスを置き換えます。 Bourne Shell を終了すると、ターミナル セッションが完全に終了します。

Bash スクリプトでの exec を使用したプログラム呼び出し

exec の方法を確認するには Bash スクリプトで動作する場合は、次の操作を行います:

1. Nano などのテキスト エディターを開き、スクリプト ファイルを作成します。

nano [script name]

2. 次のコードを貼り付けます:

#!/bin/bash

while true
do
        echo "1. Update "
        echo "2. Upgrade "
        echo "3. Exit"
   read Input
   case "$Input" in
        1) exec sudo apt update ;;
        2) exec sudo apt upgrade  ;;
        3) break
   esac
done

スクリプトは次のことを行います:

  • 3 行目 無限の while を作成します ループ。
  • 5 行目から 7 行目 可能な 3 つのオプションを出力してください。
  • 8 行目 ユーザーの入力を変数 $Input に読み込みます .
  • 9 行目 case を開始します ユーザーの入力をチェックするステートメント。
  • 10 ~ 11 行目 apt update を実行します または apt upgrade 現在のシェルの代わりにコマンド。更新またはアップグレード プロセスが終了すると、ターミナル セッションが終了します。
  • 12 行目 break を使用 無限 while を終了するステートメント ループしてスクリプトを終了します。セッションは通常どおり現在のシェルに戻ります。

3. スクリプトを保存し、Nano を閉じます。

4. 現在の環境で Bash スクリプトを実行して結果を確認します。

. [script name]

source コマンドでスクリプトを実行すると、スクリプトの動作が現在の Bash シェルに適用されます。 exec を使用 クリーンな終了のために他のプログラム内で Bash スクリプトを実行します。

Bash スクリプトのロギング

exec コマンドは、Bash スクリプトでのエラー ログのファイル記述子の操作に使用されます。デフォルトの Linux ファイル記述子は次のとおりです:

  • stdin (0) - 標準
  • stdout (1) - 標準出力
  • stderr (2) - 標準エラー

exec を使用 コマンドを実行し、ファイル記述子をファイルにリダイレクトしてログを作成します。ロギングの仕組みを確認するには、以下の手順に従ってください:

1. サンプルの Bash スクリプトを作成します:

nano logging.sh

2. コードをファイルに貼り付けます:

#!/bin/bash

# Create test.log file
touch test.log

# Save test.log to log_file variable
log_file="test.log"

# Redirect stdin to $log_file
exec 1>>$log_file

# Redirect stderr to the same place as stdin
exec 2>&1

echo "This line is added to the log file"
echo "And any other lines after"
eho "This line has an error and is logged as stderr"

このスクリプトは、すべてのコマンド出力とエラーを同じファイル (test.log) にリダイレクトします。 ).

3. スクリプトを保存し、テキスト エディターを閉じます。

4. スクリプトの権限を実行可能に変更します:

chmod +x logging.sh

5. スクリプトを実行します:

./logging.sh

スクリプトはコードを出力しません。代わりに、すべての出力ログが test.log に記録されます ファイル。

6. cat コマンドを使用して、test.log を確認します。 ファイルの内容:

cat test.log

ログ ファイルには、すべての標準出力とエラー メッセージが含まれています。 exec を使用 スクリプトをデバッグし、状況に応じて入力、出力、またはエラーをログに記録します。

クリーンな環境でスクリプトを実行

-c exec のオプション コマンドはクリーンな環境を作成します。実証するには、ターミナルで次の操作を行います:

1. 新しい Bash シェル セッションを開始します。

bash

2. printenv を使用する 現在の Bash シェルですべての環境変数を出力するコマンド:

printenv

このコマンドは、現在の Bash シェル セッションのすべての環境変数を出力します。

3. exec を使用して同じコマンドを実行します -c フラグ:

exec -c printenv

コマンド printenv クリーンな環境で実行され、コンソールに変数が出力されません。 -c を使用します クリーンな環境でスクリプトやコマンドを実行するオプション

find コマンドを使用した exec

Linux の find コマンドには exec があります コマンドをオプションとして使用して、検出されたコンテンツに対してアクションを実行します。たとえば、以下の行は chmod を実行します find のコマンド コマンドの結果:

sudo find ~ -name "test.log" -exec chmod +x '{}' \;

find コマンドは、ホーム ディレクトリを検索します (~ ) test.log の場合

結論

このチュートリアルの例に従えば、exec の使い方がわかります。 Bash スクリプトで効果的にコマンドを実行します。

次に、Crontab を使用して再起動時にジョブを自動的に実行する方法を学びます。


Linux
  1. 例を含むLinuxTeeコマンド

  2. 例を含むLinuxヘッドコマンド

  3. LinuxでのJQコマンドと例

  1. 例を含むwcLinuxコマンド

  2. Linuxのソートコマンドと例

  3. Linuxでのエコーコマンド(例付き)

  1. Linuxでのmanコマンドと例

  2. LinuxでのAWKコマンドと例

  3. LinuxでのCurlコマンドと例