Was macht der eingebaute Befehl in Bash?

35

Ich weiß, was ein eingebauter Befehl ist, aber was macht er builtinselbst? Das Ausführen which lszeigt mir /bin/ls, aber das Ausführen which builtingibt nichts zurück.

man builtingibt mir nur eine Liste der eingebauten Befehle, von denen einer ist builtin. Der Rest der Manpage erklärt, was ein Builtin ist, aber nicht wasbuiltin .

builtin --helpsagt mir builtin: usage: builtin [shell-builtin [arg ...]]aber immer noch nicht was es macht.

Ist es ein Teil von Bash in einer Weise, die andere eingebaute Befehle nicht sind?

lfalin
quelle
3
Du hast es vergessen help builtin.
Ignacio Vazquez-Abrams
3
which builtingibt keine Ergebnisse zurück, da whichder Speicherort externer Befehle gemeldet wird . Wenn Sie die Muschel fragen type builtin, wird sie Ihnen, nicht überraschend, sagen, dass builtin is a shell builtin. Sie finden das gleiche mit alias, setetc.
Toby Speight
1
builtin help builtin
Theonlygusti

Antworten:

50

Der builtinBefehl stellt sicher, dass Sie die in die Shell integrierte Version des Befehls ausführen, anstatt einen anderen Befehl mit demselben Namen auszuführen.

cdAngenommen, Sie haben eine Shell-Funktion definiert, die bei jedem Verzeichniswechsel einen zusätzlichen Status ausgibt. Aber du hast es vermasselt und jetzt kannst du die Verzeichnisse nicht mehr richtig wechseln. Jetzt können Sie tippenbuiltin cd ~ um erfolgreich in Ihr Ausgangsverzeichnis zurückzukehren, ohne die Funktion für beschädigte Shell auszuführen.

Übrigens enthält meine Kopie der bash-Manpage einen Abschnitt namens "SHELL BUILTIN COMMANDS" und definiert die Bedeutung des builtinBefehls in diesem Abschnitt ( siehe unten).

Builtin Shell-Builtin [Argumente]

    Führen Sie die angegebene integrierte Shell aus und übergeben Sie die Argumente und
    kehre zum Ausgangsstatus zurück. Dies ist nützlich beim Definieren einer Funktion
    dessen Name derselbe ist wie eine eingebaute Muschel, die die
    Funktionalität des eingebauten in der Funktion. Die CD ist eingebaut
    häufig auf diese Weise neu definiert.

    Der Rückgabestatus ist false, wenn shell-builtin kein shell-builtin ist
    Befehl.
Spiff
quelle
14
gute Antwort. Aber ich frage mich, wie Sie sicher sein können, dass das builtinKommando das echte Ergebnis von bash ist.
Pacopaco
14
@ Pacopaco: Sie können nicht :-). Sie können außer Kraft setzen builtin, auch: function builtin { echo "Hi from builtin :-)"; }. Dann klappt das builtinnicht mehr.
sleske
12
@ Pacopaco, type builtinwerde dir sagen, ob es der wahre ist builtin. Es typesei denn, wurde durch ein nicht eingebautes ersetzt type...
Toby Speight
10
oh ... leider kann man: alias unset = "echo unset wird überschrieben"; alias alias = "Echo-Alias ​​wird überschrieben" ... Also hier kein Glück.
Olivier Dulac
8
Ich liebe diese laufende Diskussion!
Sam Weaver