So lassen Sie umgeleitete Eingaben als Befehlsausgabe zählen

So lassen Sie umgeleitete Eingaben als Befehlsausgabe zählen

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.

verwandte Informationen