Eu tenho um programa que exige que eu insira dados enquanto o programa é executado. Imagine algo assim:
$ ./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
...
Agora, tenho várias entradas de teste para executar meu programa. Todos eles contêm algo como:
Arthur, King of the Britons
To seek the Holy Grail
...
No entanto, alguns dos meus scripts de teste falham e, infelizmente, é muito difícil para mim decifrar exatamente onde eles falharam, pois meu terminal se parece com isso:
$ ./program < arthur.txt
Hi there. What's your name?What is your quest?What is your favourite color?...
Existe uma maneira que eu ainda possa dar entrada stdin
através de um arquivo, mas ainda assim o terminal apareça como se eu tivesse digitado tudo?
Linux Mint 16 é o meu sistema operacional, se isso importa.
Respostas:
Em vez de usar o redirecionamento de entrada (./program <arthur.txt), que está apenas armazenando um buffer no seu programa, você deve usar ferramentas como "esperar" para aguardar a pergunta e enviar as respostas uma a uma.
Melhores exemplos: http://www.pantz.org/software/expect/expect_examples_and_tips.html
fonte
expect
script que saiba o que causa problemas no seu programa e saiba que ele alimenta a terceira linha de entrada em resposta ao "Qual é a sua cor favorita?" pergunta - e faça com que oexpect
script leia oarthur.txt
arquivo (ou qualquer outro arquivo especificado, adequadamente estruturado) para obter essas entradas, em vez de tê-las codificadas no script.É exatamente para isso que
tee
é usado.Por exemplo:
O que acontece aqui é que o tee pega o stdin e o copia para o stdout e o envia novamente. Assim como na junta para tubos.
Verifique o tee da página de manual (1) para obter mais detalhes.
fonte
program.exe
earthur.txt
.cat arthur.txt | tee >( program.exe )