bashで実行できるすべてのコマンドは実際にbashではありませんか?私はシェルとその中で実行できるアプリケーションを混同してきたことに気づきました。
ベストアンサー1
シェルとアプリケーションの間には明確な境界はありません。
シェルで実行される一部のコマンドはシェルプロセスで機能するため、シェルに組み込む必要があります。たとえば、cd
シェルの作業ディレクトリの変更は外部で行うことができないため、組み込みコマンドでcd
なければなりません。しかし、これは実装の詳細です。一般ユーザーは、cd
これが組み込みコマンドになる技術的な理由があることを知る必要はありません。
他の極端には、さまざまな作者が作成したFirefoxやEmacsなどの大規模なアプリケーションがあります。大きすぎるため、どのシェルにも組み込まれません。しかし、不可能ではありません。ただデザインの問題だけです。たとえば、単純なGUIアプリケーションを作成するための機能を備えたシェルがあります。
途中でランダムに実行できるコマンドもあります。たとえば、このecho
コマンドはシェルに組み込まれる必要はありませんが、ほとんどすべてのシェルが組み込まれており、非常に小さく、頻繁に使用されるため効率的です。もう1つの例は、kill
日常的な使用の場合は外部コマンドですが、組み込みコマンドを使用するといくつかの利点があります。プロセス数制限に達しても呼び出すことができ、シェル操作を提供できます。kill %2
プロセスIDの代わりに数字()を使用してください。[ … ]
構文(としても使用できます)もtest
原則として外部コマンドですが、同じ理由でシェルに組み込まれる可能性がありますecho
。
気になる場合は、コマンドを使用して特定のコマンドのステータスを確認できますtype
。たとえば、私の設定では次のようになります。
% type while type setenv cp emacs
while is a reserved word
type is a shell builtin
setenv is a shell function
cp is an alias for cp -i
emacs is /usr/bin/emacs
予約語(例えば、while
and)はthen
シェル構文の一部です。組み込みコマンドはシェルに組み込まれたコマンドで、外部実行可能ファイルは必要ありません。関数は、名前で呼び出すことができるカスタムおよび名前付き複合コマンドです。エイリアスは、より長いコマンドのカスタム短い名前です(関数とは異なる動作)。最後の例は外部コマンドです。
^ ディテックス。無料実装はありません。