2016-08-01 8 views
0

ich Eingabeaufforderung am Start wie: eval exec [auto_execok start] &Steuer Windows-Eingabeaufforderung über tcl

Es mir die pid zurück und startet Eingabeaufforderung. Kann ich die gestartete Shell steuern? Oder gibt es einen anderen Weg?

Gerade jetzt sende ich Befehl zum Zeitpunkt der Markteinführung wie: eval exec [auto_execok start] "cd Desktop" &

Aber ich will die Schale für weitere Operationen steuern.

+2

Sie sollten 'Expect' für interaktive CLI-Sitzungen verwenden. – Dinesh

Antwort

2

Sie können nichts, das auf diese Weise gestartet wird, kontrollieren (außer was auch immer Sie mit der PID tun können); es fordert speziell, am Ende überhaupt keine Kontrolle über die & zu haben.

Einige Programme können etwas gesteuert werden, wenn sie als Pipelines gestartet werden.

Noch mehr Kontrolle kann über Expect, ein Erweiterungspaket erfolgen.

Das Eingabeaufforderungsfenster kann jedoch nicht durch einen dieser Mechanismen gesteuert werden. Die meisten Programme, die Windows öffnen, können nicht.

+0

Ich benutze "&" b'coz ohne es Ich bekomme nicht die tcl-Eingabeaufforderung zurück. – Dcode

+0

Ja.Mit 'exec' ohne' & 'wartet Tcl darauf, dass der Subprozess beendet wird, bevor er fortfährt. Mit einer Terminal-Eingabeaufforderung könnte das etwas dauern! –

0

Ich vermute, Sie versuchen, eine Batch-Datei auf die harte Tour neu zu erfinden.

Wenn Sie eine Reihe von Aufgaben ausführen müssen cmd.exe verwenden, laichen sie

set cmd [open |cmd.exe "r+"] 

und anschließend einfach Ihre Batch-Skript zu diesem Stream schreiben:

puts $cmd $myscript 

zu erklären: Schalen (Tcl eigene tclsh und wish enthalten) haben in der Regel zwei Modi der Ausführung: interaktive und nicht interaktive. Die Tabelle wird aktiviert, wenn die Shell gestartet wird "wie sie ist", die zweite —, wenn sie in einer Pipeline gestartet wird. Im interaktiven Modus zeigt die Shell die Eingabeaufforderung an und akzeptiert die Befehle — interaktiv. In einem nicht interaktiven Modus liest es nur Befehle auf seinem standard input stream und führt sie aus, wie es sie liest. Die cmd.exe von Windows ist keine Ausnahme, so können Sie open |cmd.exe es in "lesen/schreiben" -Modus (r+) schreiben und das Skript in seiner Batch-Befehlssprache zu seinem Standard-Eingabe-Stream, der an das Stream-Objekt open zurückgegeben wird zurückgibt.

Wenn ein Prozess begann mit open oder exec schreibt etwas auf seinen Standard Fehler Strom und/oder beendet mit einem Nicht-Null-Exit-Code, werden diese Befehle eine Ausnahme ausgelöst (das heißt, die Fehlerbehandlung vor allem für Sie abgedeckt).


Nun, für Windows, ist es schwieriger, zu definieren, was „interaktiv“ vs „nicht interaktiven“ bedeutet, aber es ist etwas irrelevant für die Frage auf der Hand.