Es ist auch erwähnenswert, dass einige (viele?) Programme sich anders verhalten, wenn sie von einem Benutzer (dh an der Befehlszeile) als Teil eines Stapelprozesses/Laufs von einem anderen Prozess ausgeführt werden. Der tatsächliche Unterschied besteht darin, ob ein Terminal an den Prozess angeschlossen ist. Der Spawn-Befehl, ein Teil der Expect-Erweiterung von Tcl, richtet Dinge so ein, dass sich das ausgeführte Programm als von einem Benutzer ausgeführt versteht und dann Funktionalität hinzufügt, um dem tcl-Programm auf bequeme Weise die Interaktion mit dem externen Programm zu ermöglichen (dh, es wird über reguläre Ausdrücke ausgegeben und verzweigt diese Übereinstimmungen). Dinge, die über Spawn laufen, werden asynchron ausgeführt.
Der Befehl exec ist ein Tcl-Kernbefehl, der das andere Programm ausführt und dessen Ausgabe zurückgibt. Es tut nichts von der komplizierten Einrichtung, die spawn tut, aber es kann sehr praktisch sein, einfach ein Programm auszuführen und seine Ausgabe zu sehen (und es ist der Rückkehrcode). Dinge, die von exec ausgeführt werden, werden standardmäßig synchron ausgeführt, aber ein kaufmännisches Und-Zeichen am Ende des Befehls bewirkt, dass es im Hintergrund ausgeführt wird (ähnlich wie beim traditionellen Shell-Scripting).
Der Befehl open, der normalerweise zum Lesen/Schreiben von Dateien verwendet wird, kann auch zum Ausführen externer Prozesse verwendet werden. Indem Sie dem Befehlsnamen das Pipe-Symbol (|) voranstellen, geben Sie ihm an, einen externen Prozess auszuführen und Zugriff auf Lese-/Schreib-Dateideskriptoren zu erhalten, um mit dem resultierenden Prozess zu interagieren. Dies ist eine Art Mittelweg zwischen Exec und Spawn, mit viel mehr Interaktion mit dem verfügbaren Prozess, aber ohne die komplizierte Umgebung, die das Spawn tut. Es kann sehr praktisch für die Interaktion mit Programmen sein, die Eingaben benötigen, aber für die Automatisierung noch ziemlich gut eingerichtet sind.
Ein Beispiel für ein solches Programm ist ironisch tclsh. –