Ich würde gerne wissen, ob die Befehle , die wir in der Shell aufrufen, Funktionen oder Programme sind .
Ich würde gerne wissen, ob die Befehle , die wir in der Shell aufrufen, Funktionen oder Programme sind .
Antworten:
Es hängt davon ab, ob.
Befehle können in mehrere Kategorien unterteilt werden: integrierte Funktionen, Aliase, Funktionen, ausführbare Dateien (Skripts und Binärdateien im Suchpfad).
In der Befehlszeile belegen diese einen einzelnen, flachen Namespace, der das Überschreiben ermöglicht. Es gibt zahlreiche Möglichkeiten, Arten von Programmen voneinander zu unterscheiden:
$ f () { :; }
$ alias a=cat
$ which f
f ()
{
:
}
Wir wissen, dass f
das eine Funktion ist.
$ which a
alias a='cat'
/usr/bin/cat
Wir wissen, dass dies a
ein Alias ist.
$ which yes
/usr/bin/yes
Wir wissen, dass yes
das ein Programm ist.
$ builtin echo ; echo $?
0
Die Schale hat eine echo
eingebaute…
$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1
… Aber keine für cat
. Wenn es einen eingebauten oder einen Alias gibt, Sie aber darauf bestehen, stattdessen das Programm aufzurufen, stellen Sie dem Befehl einen Backslash voran:
$ builtin true | printf "%d\n" $?
0
$ alias true=false
$ true ; printf "%d\n" $?
1
$ \true ; printf "%d\n" $?
0
sh -c 'type true; f() { echo x; }; type f'
type
vorzuziehen ist which
. Siehe unix.stackexchange.com/q/85249/135943
Die Definition von a function
gibt einzelne Werte zurück und gibt nichts aus. Insbesondere Shell-Funktionen können sehr gut eine Ausgabe oder andere Nebenwirkungen haben, da der Rückgabewert von Funktionen so begrenzt ist.
A command
ist eine Anweisung eines Benutzers, einen Computer anzuweisen, etwas zu tun, beispielsweise ein einzelnes Programm oder eine Gruppe verknüpfter Programme auszuführen.
A program
ist eine Folge von Anweisungen (dh Befehlen), die einem Computer gegeben werden und von der Zentraleinheit (CPU) des Computers verstanden werden können. Diese Anweisungen geben an, welche Vorgänge der Computer an einem Datensatz ausführen soll.
Allerdings functions
sind logische Teilmenge des Programms. Das Anrufen einer Person liegt ganz in Ihrem Prozess. Das command
ist ein Programm (oder eine eingebaute Shell), das über die Befehlsshell ausgeführt werden kann. Der Befehl implementiert Funktionen, die eine Aufgabe ausführen. Das Gegenteil ist nicht richtig.
chdir()
oder setenv()
in der Shell, die für sie ein eindeutiger übergeordneter Prozess ist.