
Ich habe ein einfaches C-Konsolenprogramm, das einige Tastatureingaben entgegennimmt und Eingabeaufforderungen und Berechnungen ausgibt. Ich habe auch zwei Textdateien: eine Datei mit Eingaben für das Programm und eine Datei, die die Ausgabe enthält, die das Programm liefern soll.
Das Problem ist, dass
$ c_program < input_file > output_file
gibt die Eingabe nicht in die Ausgabedatei aus. Die Ausgabedatei enthält nur die Eingabeaufforderungen und Berechnungen, ohne die umgeleitete Eingabe. Wie kann ich die Eingabe mit der Ausgabe verzahnen, sodass die Ausgabedatei genauso aussieht wie bei einer Eingabe über die Tastatur?
Hier ist beispielsweise eine Beispielsitzung:
Input number of feet traveled: 5
Input number of seconds: 2.5
Average speed is 2.0 feet per second
Aber wenn wir Eingabe und Ausgabe umleiten, erhalten wir:
Input number of feet traveled: Input number of seconds: Average speed is 2.0 feet per second
Wie kann ich dafür sorgen, dass das Zweite dem Ersten ähnelt?
Antwort1
Wenn Sie eine Interaktion mit einem Programm skripten und dabei die Interaktion in der richtigen Reihenfolge erfassen möchten, sollten Sie sich fortgeschrittenere Tools als nur die Eingabe- und Ausgabeumleitung ansehen.
Verwenden Sie beispielsweiseerwarten(1)Sie könnten Ihre Interaktion folgendermaßen skripten:
#!/usr/bin/expect
spawn "./c_program"
expect "Input number of feet traveled: "
send "5\r"
expect "Input number of seconds: "
send "2.5\r"
expect eof
Wenn Sie das Skript ausführen, erhalten Sie das Transkript der gesamten automatisierten Interaktion.