これは「あたかも」ルールです。
簡単に言えば、実装が標準の外部コマンドをシェル組み込みとしても使用可能にすることを決定した場合、ユーザーが見るシェルの動作は変わらないはずです。
私が/unix//a/496291/5132で示した(一方の)PD Korn、MirBSD Korn、およびHeirloom Bourneシェルの動作の対比。(一方で)Z、93 Korn、Bourne Again、Debian Almquistシェル。そして(握り手で)渡辺貝がこれを強調しています。
printf
ビルトインとしてないシェルの場合、/usr/bin
から削除PATH
すると、printf
動作を停止します。適合モードで渡辺シェルが示すPOSIX適合動作は、同じ結果を引き起こします。printf
組み込みのシェルの動作は、外部コマンドを呼び出しているかのようです。
一方、非準拠シェルのすべての動作は、/usr/bin
から削除された場合は変更されず、外部コマンドを呼び出しているかのようには動作しPATH
ません。
標準が保証しようとしているのは、シェルがあらゆる種類の通常外部コマンドを組み込み(またはそれらを独自のシェル関数として実装)できることであり、組み込みと同じ動作を引き続き行うことができますPATH
コマンドが見つからないように調整する場合は、外部コマンドを使用します。 PATH
起動できるコマンドを選択および制御するためのツールのままです。
(/unix//a/448799/5132で説明されているように、何年も前に人々は、何がオンになっていPATH
たかを変更することでUnixの個性を選択しました。)
コマンドを見つけることができるかどうかに関係なく、コマンドを常に機能させることPATH
は、実際には、通常は外部コマンドをビルトインするポイントです。(これが、私のnoshツールセットprintenv
がバージョン1.38で組み込みコマンドを取得した理由です。実際、これはシェルではありませんが。)
ただし、標準では、関数を呼び出す他の非シェルプログラムから見られるように、シェルから起動していない通常の外部コマンドに対して同じ動作が見られるという保証が与えられており、シェルは魔法のようにはできません他のプログラムが同じで見つけることができない通常の外部コマンドを(明らかに)実行します。すべてはユーザーの観点から一貫して機能し、その動作を制御するためのツールです。PATH
execvpe()
PATH
PATH
参考文献