Saya memiliki program yang mengharuskan saya untuk memasukkan data saat program berjalan. Bayangkan seperti ini:
$ ./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
...
Sekarang, saya memiliki sejumlah input uji untuk menjalankan program saya. Semuanya mengandung sesuatu seperti:
Arthur, King of the Britons
To seek the Holy Grail
...
Namun, beberapa skrip pengujian saya gagal, dan sayangnya sangat sulit bagi saya untuk menguraikan dengan tepat di mana mereka gagal, karena terminal saya terlihat seperti ini:
$ ./program < arthur.txt
Hi there. What's your name?What is your quest?What is your favourite color?...
Apakah ada cara agar saya masih bisa memberi input stdin
melalui file, tetapi masih ada terminal yang muncul seolah-olah saya sudah mengetik semuanya?
Linux Mint 16 adalah OS saya jika itu penting.
Jawaban:
Alih-alih menggunakan pengalihan input (./program <arthur.txt), yang hanya buffering input ke program Anda, Anda harus menggunakan alat seperti "berharap" untuk menunggu pertanyaan dan mengirim jawaban satu per satu.
Contoh yang lebih baik: http://www.pantz.org/software/expect/expect_examples_and_tips.html
sumber
expect
skrip yang tahu apa yang menyebabkan masalah program Anda, dan tahu untuk memberi makan program Anda baris input ketiga sebagai respons terhadap "Apa warna favorit Anda?" pertanyaan - dan kemudian mintaexpect
skrip membacaarthur.txt
file (atau file lain yang ditentukan, terstruktur dengan tepat) untuk mendapatkan input tersebut, alih-alih meminta mereka menuliskannya dalam skrip.Inilah tepatnya yang
tee
digunakan untuk.Sebagai contoh:
Apa yang terjadi di sini adalah tee mengambil stdin dan menyalinnya ke stdout dan mengirimkannya kembali. Sama seperti pada sambungan pipa.
Periksa tee manual (1) untuk lebih jelasnya.
sumber
program.exe
danarthur.txt
.cat arthur.txt | tee >( program.exe )