Skip to main content

WIE MAN: Linux - Unix-Befehl: exec - 2021

Linux Exec System Call (Januar 2021).

Anonim

exec - Unterprozess (en) aufrufen

Zusammenfassung

exec? Schalter ? arg ? arg … ?

Beschreibung

Dieser Befehl behandelt seine Argumente als Spezifikation eines oder mehrerer Unterprozesse, die ausgeführt werden sollen. Die Argumente haben dabei die Form einer Standard-Shell-Pipeline arg wird zu einem Wort eines Befehls, und jeder einzelne Befehl wird zu einem Unterprozess.

Wenn die ersten Argumente anexec beginnen mit- Sie werden dann als Befehlszeilenschalter behandelt und sind nicht Teil der Pipeline-Spezifikation. Folgende Schalter werden derzeit unterstützt:

-keepnewline

Behält eine abschließende neue Zeile in der Ausgabe der Pipeline bei. Normalerweise wird eine nachgestellte Zeile gelöscht.

--

Markiert das Ende der Schalter. Das folgende Argument wird als erstes behandelt arg auch wenn es mit a beginnt-.

Wenn ein arg (oder ein Paar von arg 's) hat eine der unten beschriebenen Formen und wird dann von verwendetexec um den Fluss von Eingabe und Ausgabe zwischen den Unterprozessen zu steuern. Solche Argumente werden nicht an den / die Unterprozess (e) übergeben. In Formularen wie `` < Dateiname '' Dateiname kann sich entweder in einem separaten Argument von `` <'' befinden oder in demselben Argument ohne Zwischenraum (d. h. `` < Dateiname '').

|

Trennt verschiedene Befehle in der Pipeline. Die Standardausgabe des vorhergehenden Befehls wird in die Standardeingabe des nächsten Befehls geleitet.

|&

Trennt verschiedene Befehle in der Pipeline. Sowohl die Standardausgabe als auch der Standardfehler des vorhergehenden Befehls werden in die Standardeingabe des nächsten Befehls geleitet. Diese Form der Umleitung überschreibt Formulare wie 2> und> &.

< Dateiname

Die Datei mit dem Namen Dateiname wird geöffnet und als Standardeingabe für den ersten Befehl in der Pipeline verwendet.

<@ fileId

FileId muss der Bezeichner für eine geöffnete Datei sein, z. B. der Rückgabewert eines vorherigen Aufrufs anöffnen. Sie wird als Standardeingabe für den ersten Befehl in der Pipeline verwendet. FileId muss zum Lesen geöffnet worden sein.

<< Wert

Wert wird als Standardeingabe an den ersten Befehl übergeben.

> Dateiname

Die Standardausgabe des letzten Befehls wird in die genannte Datei umgeleitet Dateiname, überschreibt den vorherigen Inhalt.

2> Dateiname

Der Standardfehler aller Befehle in der Pipeline wird zur angegebenen Datei umgeleitet Dateiname, überschreibt den vorherigen Inhalt.

>& Dateiname

Sowohl die Standardausgabe des letzten Befehls als auch der Standardfehler aller Befehle werden in die genannte Datei umgeleitet Dateiname, überschreibt den vorherigen Inhalt.

>> Dateiname

Die Standardausgabe des letzten Befehls wird in die genannte Datei umgeleitet Dateiname anhängen, anstatt es zu überschreiben.

2>> Dateiname

Der Standardfehler aller Befehle in der Pipeline wird zur angegebenen Datei umgeleitet Dateiname anhängen, anstatt es zu überschreiben.

>>& Dateiname

Sowohl die Standardausgabe des letzten Befehls als auch der Standardfehler aller Befehle werden in die genannte Datei umgeleitet Dateiname anhängen, anstatt es zu überschreiben.

>@ fileId

FileId muss der Bezeichner für eine geöffnete Datei sein, z. B. der Rückgabewert eines vorherigen Aufrufs anöffnen. Die Standardausgabe des letzten Befehls wird an weitergeleitet fileId Datei, die zum Schreiben geöffnet sein muss.

2>@ fileId

FileId muss der Bezeichner für eine geöffnete Datei sein, z. B. der Rückgabewert eines vorherigen Aufrufs anöffnen. Der Standardfehler aller Befehle in der Pipeline wird zu umgeleitet fileId die Datei. Die Datei muss zum Schreiben geöffnet sein.

>[[email protected]] fileId

FileId muss der Bezeichner für eine geöffnete Datei sein, z. B. der Rückgabewert eines vorherigen Aufrufs anöffnen. Sowohl die Standardausgabe des letzten Befehls als auch der Standardfehler aller Befehle werden zu umgeleitet fileId die Datei. Die Datei muss zum Schreiben geöffnet sein.

Wenn die Standardausgabe nicht umgeleitet wurde, wird dieexec Befehl gibt die Standardausgabe des letzten Befehls in der Pipeline zurück. Wenn einer der Befehle in der Pipeline abnormal beendet wird oder beendet oder deaktiviert wirdexec gibt einen Fehler zurück und die Fehlernachricht enthält die Ausgabe der Pipeline, gefolgt von Fehlernachrichten, die die anormalen Abbrüche beschreiben; dasFehlercode Die Variable enthält zusätzliche Informationen zur zuletzt aufgetretenen abnormalen Beendigung. Wenn einer der Befehle in seine Standardfehlerdatei schreibt und dieser Standardfehler nicht umgeleitet wird, dannexec wird einen Fehler zurückgeben; Die Fehlermeldung enthält die Standardausgabe der Pipeline, gefolgt von Meldungen zu anormalen Abbrüchen (falls vorhanden), gefolgt von der Standardfehlerausgabe.

Wenn das letzte Zeichen der Ergebnis- oder Fehlermeldung eine Newline ist, wird dieses Zeichen normalerweise aus der Ergebnis- oder Fehlermeldung gelöscht. Dies ist konsistent mit anderen Tcl-Rückgabewerten, die normalerweise nicht mit Zeilenumbrüchen enden. jedoch, wenn-keepnewline wird angegeben, dann wird die nachgestellte Zeile beibehalten.

Wenn die Standardeingabe nicht mit "<" oder "<<" oder "@ @" umgeleitet wird, wird die Standardeingabe für den ersten Befehl in der Pipeline von der aktuellen Standardeingabe der Anwendung übernommen.

Wenn der letzte arg ist `` & '', dann wird die Pipeline im Hintergrund ausgeführt. In diesem Fall dieexecDer Befehl gibt eine Liste zurück, deren Elemente die Prozesskennungen für alle Unterprozesse in der Pipeline sind.Die Standardausgabe des letzten Befehls in der Pipeline geht zur Standardausgabe der Anwendung, wenn sie nicht umgeleitet wurde, und die Fehlerausgabe aller Befehle in der Pipeline geht in die Standardfehlerdatei der Anwendung, sofern nicht umgeleitet.

Das erste Wort in jedem Befehl wird als Befehlsname verwendet. Tilde-Ersetzung wird darauf ausgeführt, und wenn das Ergebnis keine Schrägstriche enthält, werden die Verzeichnisse in der Umgebungsvariablen PATH nach einer ausführbaren Datei mit dem angegebenen Namen durchsucht. Wenn der Name einen Schrägstrich enthält, muss er sich auf eine ausführbare Datei beziehen, die vom aktuellen Verzeichnis aus erreichbar ist. An den Argumenten der Befehle werden keine "glob" -Erweiterungen oder andere shell-ähnliche Ersetzungen vorgenommen.

Probleme mit der Portabilität

Windows (alle Versionen)

Lesen oder Schreiben in einen Socket mit dem ``@ fileId Notation funktioniert nicht. Beim Lesen von einem Socket hängt eine 16-Bit-DOS-Anwendung und eine 32-Bit-Anwendung kehrt sofort mit dem Dateiende zurück. Wenn einer der beiden Anwendungstypen in einen Socket schreibt, werden die Informationen stattdessen an die Konsole gesendet, sofern vorhanden oder verworfen.

Das Text-Widget der Tk-Konsole bietet keine echten Standard-E / A-Funktionen. Wenn unter Tk von der Standardeingabe umgeleitet wird, wird für alle Anwendungen ein sofortiges Dateiende angezeigt. Informationen, die an die Standardausgabe oder den Standardfehler weitergeleitet werden, werden verworfen.

Schrägstriche vorwärts oder rückwärts werden als Pfadtrennzeichen für Argumente für Tcl-Befehle akzeptiert. Bei der Ausführung einer Anwendung kann der für die Anwendung angegebene Pfadname auch Vorwärts- oder Rückwärtsschrägstriche als Pfadtrennzeichen enthalten. Beachten Sie jedoch, dass die meisten Windows-Anwendungen Argumente mit Schrägstrich nur als Optionsbegrenzer und Backslashes nur in Pfaden akzeptieren. Argumente für eine Anwendung, die einen Pfadnamen mit Schrägstrich angeben, werden nicht automatisch in das Backslash-Zeichen konvertiert. Wenn ein Argument Schrägstriche als Pfadtrennzeichen enthält, kann es je nach Programm als Pfadname erkannt werden.

Beim Aufruf einer 16-Bit-DOS- oder Windows 3.X-Anwendung müssen alle Pfadnamen das kurze, kryptische Pfadformat verwenden (z. B. `applba ~ 1.def 'anstelle von` applbakery.default' '). ).

Zwei oder mehr Schrägstriche hintereinander in einem Pfad beziehen sich auf einen Netzwerkpfad. Zum Beispiel eine einfache Verkettung des Stammverzeichnissesc: / mit einem Unterverzeichnis/ windows / system wird nachgebenc: windows / system (zwei Schrägstriche zusammen), bezieht sich auf den genannten Mount-PunktSystem auf der maschine angerufenFenster (und dasc: / wird ignoriert) und ist nicht äquivalent zuc: / windows / system, das ein Verzeichnis auf dem aktuellen Computer beschreibt. DasDatei beitreten Befehl sollte verwendet werden, um Pfadkomponenten zu verketten.

Windows NT

Beim Versuch, eine Anwendung auszuführen,exec sucht zuerst nach dem angegebenen Namen. Dann in der Reihenfolge.com, .exe, und.Fledermaus werden an das Ende des angegebenen Namens angehängt und es wird nach dem längeren Namen gesucht. Wenn ein Verzeichnisname nicht als Teil des Anwendungsnamens angegeben wurde, werden die folgenden Verzeichnisse beim Auffinden der Anwendung automatisch in dieser Reihenfolge durchsucht:

Das Verzeichnis, aus dem die ausführbare Tcl-Datei geladen wurde.Das aktuelle VerzeichnisDas Windows NT 32-Bit-Systemverzeichnis.Das Windows NT 16-Bit-Systemverzeichnis.Das Windows NT-Basisverzeichnis.Die im Pfad aufgeführten Verzeichnisse.

Um die Shell-Befehle auszuführen, wiedir undKopierenDer Anrufer muss `` voranstellencmd.exe / c'' zum gewünschten Befehl.

Windows 95

Beim Versuch, eine Anwendung auszuführen,exec sucht zuerst nach dem angegebenen Namen. Dann in der Reihenfolge.com, .exe, und.Fledermaus werden an das Ende des angegebenen Namens angehängt und es wird nach dem längeren Namen gesucht. Wenn ein Verzeichnisname nicht als Teil des Anwendungsnamens angegeben wurde, werden die folgenden Verzeichnisse beim Auffinden der Anwendung automatisch in dieser Reihenfolge durchsucht:

Das Verzeichnis, aus dem die ausführbare Tcl-Datei geladen wurde.Das aktuelle VerzeichnisDas Windows 95-Systemverzeichnis.Das Windows 95-Basisverzeichnis.Die im Pfad aufgeführten Verzeichnisse.

Um die Shell-Befehle auszuführen, wiedir undKopierenDer Anrufer muss `` voranstellencommand.com / c'' zum gewünschten Befehl.

Sobald eine 16-Bit-DOS-Anwendung die Standardeingabe von einer Konsole gelesen und dann beendet hat, wird bei allen 16-Bit-DOS-Anwendungen die Standardeingabe als bereits geschlossen angezeigt. 32-Bit-Anwendungen haben dieses Problem nicht und werden ordnungsgemäß ausgeführt, selbst nachdem eine 16-Bit-DOS-Anwendung der Meinung ist, dass die Standardeingabe geschlossen ist. Derzeit ist keine Lösung für diesen Fehler bekannt.

Umleitung zwischen demNUL: Gerät und eine 16-Bit-Anwendung funktioniert nicht immer. Beim Umleiten vonNUL:Einige Anwendungen können hängen, andere erhalten einen unendlichen Stream von `` 0x01 '' Bytes, und manche werden tatsächlich ein sofortiges Ende der Datei erhalten. Das Verhalten scheint auf etwas zu beruhen, das in der Anwendung selbst kompiliert wurde. Beim Umleiten von mehr als 4K oder so weiterNUL:Einige Anwendungen werden hängen bleiben. Die obigen Probleme treten bei 32-Bit-Anwendungen nicht auf.

Alle DOS-16-Bit-Anwendungen werden synchron ausgeführt. Alle Standardeingaben von einer Pipe in eine 16-Bit-DOS-Anwendung werden in einer temporären Datei gesammelt. Das andere Ende der Pipe muss geschlossen sein, bevor die 16-Bit-DOS-Anwendung mit der Ausführung beginnt.Alle Standardausgaben oder Fehler von einer 16-Bit-DOS-Anwendung an eine Pipe werden in temporären Dateien gesammelt. Die Anwendung muss beendet werden, bevor die temporären Dateien zur nächsten Phase der Pipeline umgeleitet werden. Dies ist auf eine Problemumgehung für einen Windows 95-Fehler bei der Implementierung von Pipes zurückzuführen, und die Standard-Windows 95-DOS-Shell behandelt Pipes selbst.

Bestimmte Anwendungen, wie zcommand.com, sollte nicht interaktiv ausgeführt werden. Anwendungen, die direkt auf das Konsolenfenster zugreifen und nicht aus ihrer Standardeingabe lesen und in ihre Standardausgabe schreiben, können fehlschlagen, Tcl aufhängen oder sogar das System hängen lassen, wenn ihnen kein eigenes privates Konsolenfenster zur Verfügung steht.

Macintosh

Dasexec Der Befehl ist nicht implementiert und unter Macintosh nicht vorhanden.

Unix

Dasexec Der Befehl ist voll funktionsfähig und funktioniert wie beschrieben.

Siehe auch

Fehler (n), offen (n)

Schlüsselwörter

Ausführen, Pipeline, Umleitung, Unterprozess

Wichtig: Verwenden Sie die Mann Befehl ( % Mann ), um zu sehen, wie ein Befehl auf Ihrem Computer verwendet wird.