Ich habe ein Programm, bei dem ich Daten eingeben muss, während das Programm ausgeführt wird. Stellen Sie sich so etwas vor:
$ ./program
Hi there. What's your name? Zambezi
What is your quest? To make a program which runs nicely
What is your favourite color? Red
...
Jetzt habe ich eine Reihe von Testeingaben, mit denen ich mein Programm ausführen kann. Sie enthalten alle etwas wie:
Arthur, King of the Britons
To seek the Holy Grail
...
Einige meiner Testskripte schlagen jedoch fehl, und leider ist es für mich sehr schwierig, genau zu entschlüsseln, wo sie fehlgeschlagen sind, da mein Terminal so aussieht:
$ ./program < arthur.txt
Hi there. What's your name?What is your quest?What is your favourite color?...
Gibt es eine Möglichkeit, an der ich mich noch beteiligen kann? stdin
über eine Datei, aber immer noch das Terminal angezeigt, als hätte ich alles eingegeben?
Linux Mint 16 ist mein Betriebssystem, wenn es darauf ankommt.
Antworten:
Anstatt die Eingabeumleitung (./program & lt; arthur.txt) zu verwenden, die nur die Eingabe in Ihr Programm puffert, sollten Sie Tools verwenden, die genau wie erwartet auf die Frage warten und die Antworten nacheinander senden.
Bessere Beispiele: http://www.pantz.org/software/expect/expect_examples_and_tips.html
quelle
expect
Skript, das weiß, was Ihre Programmprobleme hervorruft, und Ihr Programm mit der dritten Eingabezeile als Antwort auf die Frage "Was ist Ihre Lieblingsfarbe?" frage - und dann hab dieexpect
Skript las diearthur.txt
Datei (oder eine andere angegebene, entsprechend strukturierte Datei), um diese Eingaben abzurufen, anstatt sie im Skript fest zu codieren.Genau das ist was
tee
wird verwendet für.Zum Beispiel:
Was hier passiert, ist, dass tee stdin nimmt und auf stdout kopiert und es wieder herauspfeift. Genau wie eine T-Verbindung für Rohre.
Weitere Informationen finden Sie auf der Hilfeseite tee (1).
quelle
program.exe
undarthur.txt
.cat arthur.txt | tee >( program.exe )