expect
é para um propósito diferente. Ele executa comandos em um programa cativo. Você, ao contrário, está pedindo uma maneira de enviar comandos para um processo já em execução em segundo plano.
Como um exemplo mínimo do que você quer, crie um FIFO:
$ mkfifo in
Um FIFO é um arquivo especial que um processo pode gravar enquanto um processo diferente lê a partir dele. Vamos criar um processo para ler nosso arquivo FIFO in
:
$ python <in &
[1] 3264
Agora, vamos enviar python
um comando para executar a partir do shell atual:
$ echo "print 1+2" >in
$ 3
A saída de python
é 3
e aparece aqui no stdout. Se tivéssemos redirecionado o stdout do python, ele poderia ser enviado para outro lugar.
O que expect
faz
expect
permite automatizar a interação com um comando cativo. Como um exemplo do que expect
pode fazer, crie um arquivo:
#!/usr/bin/expect --
spawn python
expect ">>>"
send "print 1+2\r"
expect ">>>"
Em seguida, execute este arquivo com expect
:
$ expect myfile
spawn python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 1+2
3
>>>