Welches Programm empfängt Kommandozeilenbefehle?

Welches Programm empfängt Kommandozeilenbefehle?

Wenn Sie auf dem Terminal „vim Dateiname“ eingeben, weiß ich, dass vim den Dateinamen als Parameter erhält, aber ich vermute, dass ein Programm vim auch als Parameter erhält … ist das nur der Terminalemulator oder ein anderes Programm?

Antwort1

Zu dem Zeitpunkt, an dem Sie vim filenamein die Befehlszeile tippen, ist die Shell bereits gestartet, sodass die Shell (und der Terminalemulator) nicht vimals Befehlszeilenargument verfügbar ist.

vim, dagegen schon, aber das steht dem Benutzer nicht zur Verfügung. Wenn ein Programm gestartet wird, wird sein Namenormalerweiseals nulltes Kommandozeilenargument angegeben. Sie können dies sehen, indem Sie eine Shell starten und echoen $0:

$ sh
$ echo $0
sh
$ exit

Die Shell führt die Befehle auf der Kommandozeile mit execve()(oder einer ähnlichen exec()Funktion) aus, derenPOSIX-Spezifikationsagt

Der Wert argv[0]sollte auf eine Dateinamenzeichenfolge verweisen, die mit dem Prozess verknüpft ist, der von einer der execFunktionen gestartet wird.

argv[0]im obigen Text entspricht $0in einem Shell-Skript.

Im Abschnitt „Begründung“ heißt es weiter:

Die Anforderung an eine streng konforme POSIX-Anwendung besagt außerdem, dassDer als erstes Argument übergebene Wert ist eine Dateinamenzeichenfolge, die mit dem gestarteten Prozess verknüpft ist.. Obwohl einige vorhandene Anwendungen unter Umständen einen Pfadnamen statt einer Dateinamenzeichenfolge übergeben, ist eine Dateinamenzeichenfolge im Allgemeinen nützlicher, da sie üblicherweise argv[0]zum Drucken von Diagnosen verwendet wird. In einigen Fällen ist der übergebene Dateiname nicht der tatsächliche Dateiname der Datei. Beispielsweise verwenden viele Implementierungen des Anmeldedienstprogramms die Konvention, dem tatsächlichen Dateinamen ein <hyphen-minus>( -) voranzustellen, was dem aufgerufenen Befehlsinterpreter anzeigt, dass es sich um eine „Anmeldeshell“ handelt.

verwandte Informationen