by shigemk2

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

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

コマンドの実行その1

  • bashの内部パイプラインにおけるコマンド実行ステージは、実際のアクションが発生する場所である
  • コマンド名の部分が読み込んで実行するファイルとなり、残りの単語はargvの残りの要素となる(ls -al hogeでいうと、lsがコマンドで、-al hogeがargvの部分)

リダイレクト

  • 最近追加されたリダイレクト構文によって、シェルに適切なファイルディスクリプタを選ばせてそれを指定した変数に代入できるようになり、ユーザーがファイルディスクリプタを指定する必要はなくなった
  • シェルは、ファイルシステムから実行して新しいプロセスを立ち上げるコマンドとシェ ル自身が実行する(組み込みの)コマンドの区別を意図的に曖昧にしている
ファイル記述子は、オープン中ファイルの詳細を記録しているカーネル内データ構造(配列)へのインデックスである

ファイル記述子 - Wikipedia

  • 複数のリダイレクトを単純にオブジェクトのリストで実装しているので、取り消しに使うリダイレクトは別のリストとして保持する
  • 過去のバージョンのBourneシェルでは、ユーザーが操作できるファイルディスクリプタが0から9までだけだった。10以上は、シェルが内部的に使うために予約されていたのだ。Bashではこの制限を緩め、プロセスのファイルオープンの上限に達するまで任意のディスクリプタを操作できるようにした

POSIX

各種UNIX OSを始めとする異なるOS実装に共通のAPIを定め、移植性の高いアプリケーションソフトウェアの開発を容易にすることを目的としてIEEEが策定したアプリケーションインタフェース規格

POSIX - Wikipedia

組み込みコマンド

  • Bashには、多数のコマンドがシェル自身の一部として組み込まれている
  • これらのコマンドはシェルから実行されるもので、新たなプロセスは立ち上げない
  • コマンドを組み込みで用意する主な理由は、シェルの内部状態を保ったり変更したりするためだ
  • Bashの組み込みコマンドは、シェルのその他の部分と同じ内部プリミティブを使う。組み込みコマンドはC言語の関数を使って実装されており、この関数は単語のリストを引数として受け取る

m-takagi/aosa-ja · GitHub