by shigemk2

当面は技術的なことしか書かない

AOSA 3 The Bourne-Again Shell その6 #read_aosa

コマンドの実行その2

単純なコマンドの実行

  • シェルの変数への代入(つまり、var=value形式の単語)は、それ自身が単純なコマンドの一種
  • 指定したコマンド名がシェルの関数や組み込みコマンドにないものであった場合、bashはファイルシステムから、その名前の実行可能なファイルを探す。環境変数PATHの値は、このときの検索先を表すディレクトリをコロン区切りでつなげたリストである
  • PATHの検索でコマンドが見つかれば、bashはそのコマンド名とフルパス名をハッシュテーブルに保存する
  • 実行するファイルが見つかれば、bashはそれをフォークして新しい実行環境を作り、この新しい環境でプログラムを実行する

ジョブ制御

  • シェルによるコマンドの実行には二通りの方法
  • フォアグラウンド
  • バックグラウンド
  • ジョブ制御とは、プロセス(実行されたコマンド)をフォアグラウンドとバックグラウンドの間で移動したり実行の一時停止や再開をしたりする機能のこと
  • この機能を実現するためにbashはジョブという概念を導入した
  • シェルは、いくつかのシンプルなデータ構造を使ってジョブ制御を実装している
  • ジョブは、プロセスのリストとジョブの状態(実行中、停止中、終了など)、そしてジョブのプロセスグループIDで管理されている

複合コマンド

  • 複合コマンドは単純なコマンドのリストで構成
  • 実装方法は、パーサが複合コマンドに対応するオブジェクトを組み立て、コマンドを解釈するときにはそのオブジェクトを走査していくという方法
  • forの場合、予約語inに続く単語のリストを展開しなければならない。それから、展開された単語を順にとりあげて適切な変数に代入

m-takagi/aosa-ja · GitHub