bashでは組み込みコマンドは何をしますか?


35

私は組み込みコマンドが何であるか知ってbuiltinいますが、それ自体は何をしますか?実行するとwhich ls表示されます/bin/lsが、実行しwhich builtinても何も返されません。

man builtin組み込みコマンドのリストを提供しますが、その1つがですbuiltin。マニュアルページの残りの部分では、ビルトインが何であるかを説明していますが、何であるかは説明していませんbuiltin

builtin --help教えてくれますbuiltin: usage: builtin [shell-builtin [arg ...]]が、それが何をするかはまだわかりません。

それは他の組み込みコマンドではない方法でbashの一部ですか?


3
忘れましたhelp builtin
イグナシオバスケス-エイブラムス

3
which builtin外部コマンドのwhich場所を報告するため、結果は返されません。シェルに尋ねると、当然のことながらそれがわかります。あなたは同じを見つけることができます、など、type builtinbuiltin is a shell builtinaliasset
トビースパイツ

1
builtin help builtin
theonlygusti

回答:


50

このbuiltinコマンドは、同じ名前で別のコマンドを実行するのではなく、コマンドのシェル組み込みバージョンを実行することを確認します。

たとえば、cdディレクトリを変更するたびに追加のステータスを出力するという名前のシェル関数を定義したとします。しかし、あなたはそれを台無しにして、ディレクトリを正しく変更することができなくなりました。これでbuiltin cd ~、壊れたシェル関数を実行せずに、ホームディレクトリに正常に戻るように入力できます。

ところで、私のbashのmanページのコピーには「SHELL BUILTIN COMMANDS」builtinというセクションがあり、そのセクションでコマンドの意味を定義しています(以下に書き起こします)。

builtin shell-builtin [引数]

    指定されたシェル組み込みコマンドを実行し、引数を渡します。
    終了ステータスを返します。これは関数を定義するときに便利です
    シェルのビルトインと同じ名前で、
    関数内の組み込みの機能。cdビルトインは
    通常、この方法で再定義されました。

    shell-builtinがシェル組み込みでない場合、戻りステータスはfalseです
    コマンド。

14
いい答えだ。しかし、builtinコマンドがbashからの実際の組み込みコマンドであることをどのようにして確認できますか?
パコパコ

14
@Pacopaco:できません:-)。オーバーライドすることもできますbuiltinfunction builtin { echo "Hi from builtin :-)"; }。その後builtin、動作しなくなります。
sleske

12
@Pacopaco、type builtinそれが本物かどうかを教えてくれますbuiltin。ない限りtype非組み込みに置き換えられましたtype...
トビースパイツ

10
ああ...残念ながら、次のことができます。alias unset = "echo unset is overrideden"; alias alias = "echo alias is overrideden" ...したがって、ここでは運がありません。
オリビエデュラック

8
この継続的な議論が大好きです!
サムウィーバー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.