【Linux】コマンド実行時のシェルの動き

ユーザーとログインシェル(bash)のやり取り

①プロンプトを表示

 ログインシェル(bash)が起動すると、ユーザーにプロンプトを表示します。プロンプトは通常、「$」や「#」などの記号で、シェルがコマンドの入力を待っている状態を示します。

②コマンドを入力(例:lsコマンド)

ユーザーがプロンプトにコマンド(例:「ls」)を入力し、Enterキーを押します。

ログインシェル(bash)と子シェル(bash)のやり取り

③子シェルを起動

 ログインシェルは、ユーザーが入力したコマンドを実行するために子シェルを起動します。子シェルはログインシェルのコピーとして生成されます。

④コマンドを検索して実行

 子シェルは、ユーザーが入力したコマンド(例:「ls」)を検索し、実行します。コマンドが内部コマンドの場合は即座に実行され、外部コマンドの場合はファイルシステム上でコマンドを探して実行します。

⑤実行結果を送信

 子シェルがコマンドの実行を終え、その結果をログインシェルに送信します。ログインシェルは、子シェルから受け取ったコマンドの実行結果をユーザーに表示します。

⑥プロセスの終了

コマンドが終了すると、ls プロセスも終了し、子シェルはログインシェルに制御を戻します。

ユーザーとログインシェル(bash)のやり取り

⑦プロンプトを表示

再度プロンプトを表示し、次のコマンドの入力を待ちます。

子シェルと環境変数

 子シェルは、ログインシェルのコピーとして起動されますが、すべての変数をコピーするのは効率が悪いため、環境変数のみを引き継ぎます。この環境変数の引き継ぎを行うために、変数にエクスポート機能を使います。

exportコマンド

 環境変数として引き継ぎたい変数には「export」コマンドを使用します。例えば、変数「MYVAR」を子シェルにも引き継ぎたい場合は、以下のようにします。

MYVAR="some_value"
export MYVAR

このように設定することで、「MYVAR」の値は子シェルにも引き継がれます。

 エクスポート機能を使って必要な環境変数だけを子シェルに引き継ぐことで、システムリソースの効率的な使用が可能になります。これにより、シェルの動作が軽快になり、パフォーマンスの向上が図られます。