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 fdas eine Funktion ist.
$ which a
alias a='cat'
/usr/bin/cat
Wir wissen, dass dies aein Alias ist.
$ which yes
/usr/bin/yes
Wir wissen, dass yesdas ein Programm ist.
$ builtin echo ; echo $?
0
Die Schale hat eine echoeingebaute…
$ 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'
typevorzuziehen ist which. Siehe unix.stackexchange.com/q/85249/135943
Die Definition von a functiongibt 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 commandist eine Anweisung eines Benutzers, einen Computer anzuweisen, etwas zu tun, beispielsweise ein einzelnes Programm oder eine Gruppe verknüpfter Programme auszuführen.
A programist 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 functionssind logische Teilmenge des Programms. Das Anrufen einer Person liegt ganz in Ihrem Prozess. Das commandist 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.