バッシュは、「履歴」を内蔵し、実行することができますが、$ PATHにありません

user171558:

私はメモリにロードされているシェル組み込みコマンドを知っていると私はは/ usr / binにどこかにあるすべての組み込みコマンドを見つけることができると思いましたecho $PATH私は歴史のコマンドがどのように機能するかを見つけるためにしようとしていました。私の仮定は、それは〜/ bash_historyから読んでいるということでした。私が試したので、objdump -S $(which history)

which history
echo $?

1

これは歴史のバイナリが配置されている場所に私を作るコマンドのパスを返しませんでした。

type -t which
builtin

私は、それがメモリにロードされ、この手段を想定しています。だから、外に保存されているシェルの処理負荷の組み込みコマンドはありませんecho $PATH

Aasmund Eldhuset:

シェル組み込みは、文字通りシェル実行可能ファイル自体に組み込まれています。それはない別のプロセスとしてではなく、単にシェルプロセス内の通常の関数呼び出しとしてシェルによって呼び出されます。あなたはそのソースコードを見つけたいのであれば、あなたはで見る必要があるのソースコードbash

以下のような多くの組み込み関数についてはcd、それは組み込みであるための主な理由は、それがシェル自体の状態を変更することです。持って無意味だろうcdそのプロセスだけではないシェルプロセスのことを、自身の現在のディレクトリを変更すると同じように、独立したプロセスです。以下の場合にはhistory、その理由は、おそらくそのされた~/.bash_historyとき、シェルが終了のみ書かれているので、コマンドも実行している内に含まれている現在のセッション、メモリ内の履歴にアクセス必要がありますbashプロセスを。以下のような他の組み込みコマンドについてはecho、その理由は、性能は以下のとおりです。コマンドはそれほど頻繁に使用される、我々は(あなたが本当にプロセスをしたいです場合は、もあり、新しいプロセスにそれが呼び出されるたびに産卵避けたいということであると仮定され/bin/echo、その)動作が異なる場合があります。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=6858&siteId=1