cd が内部コマンドの理由

cd が内部コマンドの理由

cd 以外のすべてのコマンドは、シェルの外部コマンドでいいんです。ファイルをコピーしろだの消せだのテープに保存しろだのといったもんは、シェルが外部プログラムを呼んで、「ヤットケ」で済みます。
「担当営業に電話しとけ」「風呂掃除しとけ」あらゆる、他のやつに振っちゃって大丈夫。つーか、「人にどんどん振る」のがシェルの仕事だよね。

でも、cd だけは、駄目なんです。
「シェルというプログラム」自体の状態を変える (カレント・ディレクトリを変える) のが目的ですから、これだけは、シェルが自分自身で処理しないと意味がありません。
うぅ、おしっこ行きてぇ.. というときに、「俺の代わりに小便いっとけ」つっても無意味なのと一緒です。

cd だけって書きましたが、「.」コマンド (csh 系だと source) も一緒ですね。おもに環境変数を設定するとか、任意のシェル・スクリプトを、そのシェル自身で実行するコマンドです。
(普通、シェル・スクリプトの実行は、子分のシェルを一人作って、「お前これやっとけ」というふうに実行されます)
これも「そのシェル自体の状態を変えないと意味がない」わけ。「どーも最近運動不足だなあ」ってときに、「お前代わりにジョギング行ってこい」つっても駄目。

set, export, setenv とかも。for, foreach, repeat, if とかの制御構造も、ちょい方向はちがうけど、そうだよね.あと alias, limit とか?