Como enviar parte dos dados através do pipe / arquivo e depois interativamente?

3

Eu tenho um comando que quero executar, vamos chamá-lo de program . É um programa interativo semelhante ao bash ou python REPL.

Eu quero começar este programa com alguma entrada predefinida. Eu tentei program << "some_commands" . Mas depois de executar some_commands termina e não consigo continuar interagindo manualmente.

Se este programa fosse bash eu usaria .bashrc para esse propósito.

Qual é a maneira correta de usar tal programa com a entrada inicial predefinida?

    
por sasha.sochka 21.07.2013 / 15:44

3 respostas

4

Você também pode fazer isso sem usar:

{ echo foo ; cat ; } | command
    
por 21.07.2013 / 17:40
3

expect é a ferramenta para este trabalho:

#!/usr/bin/expect -f
spawn program
expect "I'm ready for input"
send "command 1\r"
expect "I'm ready for input"
send "command 2\r"
# ...
send "command last\r"
interact

O comando interact retorna o controle para o usuário.

    
por 21.07.2013 / 16:46
2

Você pode usar o rlwrap para interagir com seu programa. O Rlwrap fornece um editor de linhas baseado na biblioteca readline, o mesmo que o bash usa. Isso normalmente não é tão bom quanto o editor de linhas fornecido pelos programas que fornecem um (por exemplo, você não obterá qualquer coloração ou conclusão de sintaxe), mas é muito mais agradável do que a interface de terminal padrão que compreende apenas backspace.

rlwrap -P 'some_commands' program

O texto é passado para o buffer de entrada mas não é enviado para o programa, então você terá que pressionar Enter depois de iniciar o programa. Todo o texto é passado como uma única string. Pode conter novas linhas.

    
por 22.07.2013 / 00:39