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
シェル構文の一部です。組み込みコマンドはシェルに組み込まれたコマンドで、外部実行可能ファイルは必要ありません。関数は、名前で呼び出すことができるカスタムおよび名前付き複合コマンドです。エイリアスは、より長いコマンドのカスタム短い名前です(関数とは異なる動作)。最後の例は外部コマンドです。
^ ディテックス。無料実装はありません。
答え2
bashコマンドを試してくださいtype
。type
コマンドが何であるかを説明します。シェル組み込みコマンドの場合、エイリアスの場合、他のプログラムの場合...
例:
[braga@coleman ~]$ type echo
echo is a shell builtin
[braga@coleman ~]$ type ls
ls is aliased to `ls --color=auto'
[braga@coleman ~]$ type usermod
usermod is /usr/sbin/usermod
一部は組み込まれており、一部は組み込まれていません。type
特定のコマンドを照会するには、を使用してください。bash
すべての組み込み関数のリストについては、マニュアルを参照してください。
- 組み込みとは何ですか?
組み込みコマンドはシェル自体に含まれています。組み込みコマンドの名前が単純なコマンドの最初の単語として使用される場合、シェルは他のプログラムを呼び出さずに直接コマンドを実行します。
- エイリアスとは何ですか?
エイリアスを使用すると、単純なコマンドの最初の単語として使用するときに単語を文字列に置き換えることができます。シェルは、aliasおよびunaliasの組み込みコマンドを使用して、設定および設定解除できるエイリアスのリストを維持します。
どちらの引用も、ソースは次のとおりです。バッシュマニュアル。
答え3
- ほとんどのコマンドはシェルの一部ではありません。 (シェルはその名前のバイナリのみを実行します。)
- シェルマシンCDスクリプト言語キーワード(while、forなど)。
- 次のコマンドエコそしてテストシェルで実装することも、実装しない場合もあります。