Mam program, który wymaga ode mnie wprowadzania danych podczas działania programu. Wyobraź sobie coś takiego:
$ ./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
...
Teraz mam wiele wejść testowych do uruchomienia mojego programu. Wszystkie zawierają coś takiego:
Arthur, King of the Britons
To seek the Holy Grail
...
Jednak niektóre moje skrypty testowe zawodzą i niestety bardzo trudno jest mi rozszyfrować dokładnie to, gdzie zawiodły, ponieważ mój terminal wygląda tak:
$ ./program < arthur.txt
Hi there. What's your name?What is your quest?What is your favourite color?...
Czy istnieje sposób, w jaki mogę przekazać dane wejściowe stdin
za pomocą pliku, ale nadal wyświetlać terminal tak, jakbym wpisał to wszystko?
Linux Mint 16 to mój system operacyjny, jeśli to ma znaczenie.
Odpowiedzi:
Zamiast używać przekierowania wejściowego (./program <arthur.txt), który tylko buforuje dane wejściowe do programu, powinieneś używać narzędzi tak, jak „oczekujesz”, czekając na pytanie i wysyłając odpowiedzi jedna po drugiej.
Lepsze przykłady: http://www.pantz.org/software/expect/expect_examples_and_tips.html
źródło
expect
skrypt, który wie, co powoduje problemy z programem, i umie podać swój trzeci wiersz danych wejściowych w odpowiedzi na „Jaki jest twój ulubiony kolor?”. pytanie - a następnieexpect
skrypt powinien odczytaćarthur.txt
plik (lub inny określony plik o odpowiedniej strukturze), aby uzyskać te dane wejściowe, zamiast zapisywać je na stałe w skrypcie.Właśnie do tego
tee
służy.Na przykład:
To, co się tutaj dzieje, to tee bierze standardowe wejście i kopiuje je na standardowe wyjście, a następnie ponownie je wyrzuca. Zupełnie jak na styku rur
Sprawdź tee strony podręcznika (1), aby uzyskać więcej informacji.
źródło
program.exe
iarthur.txt
.cat arthur.txt | tee >( program.exe )