Mir ist aufgefallen, dass ein Befehl wie cd ..
tatsächlich in konvertiert builtin cd ..
und dann ausgeführt wird. Aber wie ist builtin
definiert? which builtin
zeigt nichts an und ist nicht in /bin
usw. /usr/bin
Ist es nur Teil des Bash-Programms und wird anders behandelt?
Antwort1
Built-ins sind einfach Teil von Bash. Sie können herausfinden, ob ein Befehl Built-in ist, indem Sie verwenden type
. Beispiel:
$ type export cd source alias
export is a shell builtin
cd is a shell builtin
source is a shell builtin
alias is a shell builtin
Viele integrierte Befehle sind integriert, weil sie nicht anders funktionieren können. cd
und source
sind Beispiele.
Andere integrierte Funktionen sind lediglich aus Effizienzgründen integriert. test
(AKA [...]
) und echo
sind Beispiele.
Weitere Informationen finden Sie im SHELL BUILTIN COMMANDS
Abschnitt man bash
oder im Online-Bash-Handbuch. Um eine Liste der verfügbaren integrierten Funktionen zu erhalten, führen Sie help
in der Eingabeaufforderung aus. Um Informationen zu einer bestimmten integrierten Funktion zu erhalten, führen Sie beispielsweise test
aus help test
. Beachten Sie, dass help test
Informationen zu den integrierten Funktionen von Bash bereitgestellt werden, test
während im Gegensatz dazu man test
wahrscheinlich Hilfe zum externen test
Befehl bereitgestellt wird.
Welche Befehle sind sowohl als ausführbare als auch als integrierte Befehle verfügbar?
Mit dieser -a
Option type
werden alle Stellen angezeigt, die den genannten Befehl enthalten. Beispiel:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
So verwenden Sie eine ausführbare Datei, wenn eine integrierte Datei verfügbar ist
Wenn Sie aus irgendeinem Grund eine bestimmte ausführbare Datei und nicht das integrierte Shell-Programm verwenden möchten, müssen Sie lediglich den Pfad angeben:
$ /bin/echo "This is not the builtin"
This is not the builtin
Da die integrierten Funktionen normalerweise über mehr Funktionen verfügen, ist dies normalerweise nur für Kompatibilitätstests nützlich.
So führen Sie das Shell-Builtin aus, wenn es durch eine Funktion oder einen Alias verborgen ist
Wenn die Shell die Wahl hat, führt sie normalerweise den integrierten Befehl aus. Eine Ausnahme besteht, wenn der Benutzer einen Alias oder eine Funktion mit demselben Namen definiert hat. Wenn Sie sicher sein möchten, dass Sie den integrierten Befehl ausführen, verwenden Sie den folgenden builtin
Befehl:
$ builtin echo 1 2 3
1 2 3