Para imprimir a entrada após o prompt correspondente, você precisa saber quando o programa está aguardando a entrada. Não há como dizer ao observar o programa em execução: você não consegue distinguir um programa que está esperando por entradas no stdin de um programa que está esperando por algo a mais (rede, disco, computação,…).
Assim, o processo para obter uma transcrição que se pareça com o uso interativo tem que ser assim:
- Inicie o programa.
- Aguarde - e reconheça - o primeiro aviso.
- Exiba e envie a entrada para o primeiro prompt.
- Idem com o segundo prompt de entrada e todos os subsequentes.
- Sair quando o programa sair.
A ferramenta padrão de fato para roteirizar isso é Esperar . O script seria algo como isto (aviso: não funciona código, digitado diretamente no meu navegador):
#!/usr/bin/expect -f
set transcript_file [open "transcript" wb]
spawn myprogram
expect "Enter command:"
puts -nonewline $transcript_file $expect_out(buffer)
send "a_command\r"
puts -nonewline $transcript_file "a_command\r"
puts -nonewline $transcript_file $expect_out(buffer)
send "another_command\r"
puts -nonewline $transcript_file "another_command\r"
puts -nonewline $transcript_file $expect_out(buffer)
…
expect eof
close $transcript_file