Yash 2 その 293: 組込みコマンドの分類
Yash はこれまで組込みコマンドを特殊・準特殊・通常の三つに分類してゐた。これを変へようと思ふ。
これまで disown
や pushd
の様な組込みコマンドは準特殊といふ分類になってゐて cd
や fg
と同様に POSIX 準拠モードでも実行できた。この動作は POSIX 2016 に対応したときに入ったもので、POSIX に準拠してはゐるものの、POSIX 的に可搬性のないコマンドが POSIX 準拠モードにおいて事実上無条件で使用できるといふ緩さももたらしてゐた。可搬性のない動作をエラーにして欲しいといふ要望が複数寄せられたので、準特殊 (semi-special) 組込みコマンドを必須 (mandatory) 組込みコマンドと任意 (elective) 組込みコマンドの二種類に分けて、POSIX 準拠モードでは後者の実行を拒否する様に変更する。
POSIX XCU 1.6 に Regular Built-In Utilities
といふ表が載ってゐて、これは PATH を検索することなしに実行される組込みコマンド (ただし特殊組込みコマンドを除く) を列挙してゐる。ここでの regular (通常) といふ言葉の使ひ方は現状の yash での使ひ方と全く異なってゐる。mksh はマニュアルで regular といふ言葉を POSIX と同じ意味で用ゐてゐる。紛らはしいので、これまで使ってきた yash の通常 (regular) 組込みコマンドといふ呼び名は今後は使用しない様にする。
また、echo
や test
に関してはコマンド検索の動作を常に POSIX 準拠とする様にする。つまり、これまでは POSIX 準拠モードがオフの時は echo
や test
は PATH に関係なく組込みコマンドとして実行されてゐたが、今後は POSIX 準拠モード同様に PATH で外部コマンドが見付かったかどうかによって実行するかどうかを決める。これらが外部コマンドとして存在しない環境は非常に考へにくいので、PATH を無視して実行するといふ救済措置はもはや不要だらう。ただし、array
に関しては例外で、これは POSIX では名前が予約されてゐないし一般的な環境では対応する外部コマンドは存在しない。そのため、array
だけは POSIX 準拠モードがオフの時だけこれまで通り特別に PATH に関係なく実行する。POSIX 準拠モードでは array
組込みコマンドは完全に無視して、外部コマンドがあればそれを実行する。(これまでは外部コマンドが見付かれば組込みコマンドが実行されてゐたが、それは POSIX の要求する動作ではない。) 通常の組込みコマンド (regular built-in utilities) といふ分類を廃止し、array
を拡張 (extension) 組込みコマンドに、それ以外を代替 (substitutive) 組込みコマンドに再編する。
ところで、組込みコマンド (a built-in command) といふ呼び方は POSIX 的には正しくなく、組込みユーティリティー (a built-in utility) と呼ぶのが正しい。が、現状の yash 2 ではマニュアルのあちこちで組込みコマンドといふ言ひ方をしてしまってゐるので、これを今更修正してゆくのは骨が折れる。よって今回これを修正するつもりはない。(Yash-rs では用語法を改めてゐる。)
| 固定リンク
コメント