Eu sugiro usar a biblioteca "expect" do Tcl para isso, especialmente para o script passwd; ele aloca um pseudo-terminal que remove a maioria das surpresas e permite que você aja com base nos resultados.
Eu tento iniciar processos por script, que podem interagir.
EDIT: A questão geral é iniciar esses processos via php. Depois que o processo é iniciado, outro script php (ou o mesmo executando novamente) deve ler a saída do processo. Do que um terceiro script php deve escrever para a entrada do processo. Para simular o início pelo php eu usei um script bash, porque ele tem os mesmos problemas.
Para isso, eu crio um arquivo de saída, o processo pode gravar e um fifo, o processo lê. Meu processo é, por exemplo, passwd.
Quando eu tento assim:
mkfifo fifo.my
touch out.my
passwd > out.my 2> out.my < fifo.my & echo $!
não funciona. De acordo com esta postagem faz com que o EOF termine o processo passwd.
Após a solução da postagem mencionada, tentei
mkfifo fifo.my
touch out.my
cat > fifo.my &
passwd > out.my 2> out.my < fifo.my & echo $!
que cria dois trabalhos que eu posso assistir com
jobs
Meu alvo é, para começar isso via script bash
#!/bin/bash
cat > fifo.my & PID=$!
echo $PID
Quando eu chamo o script, um processo com PID = $ PID é criado, mas não um trabalho. E muito mais importante,
passwd > out.my 2> out.my < fifo.my & echo $!
não funciona, porque novamente um EOF é enviado pelo pipe.
Como posso manter o pipe aberto a partir de um script?
Eu sugiro usar a biblioteca "expect" do Tcl para isso, especialmente para o script passwd; ele aloca um pseudo-terminal que remove a maioria das surpresas e permite que você aja com base nos resultados.
Tags linux