Armazene stdout na variável e envie o comando para background

1

Eu tenho um comando em um script bash que eu quero capturar a saída e, em seguida, enviá-lo para o fundo. Como faço isso?

O seguinte não parece funcionar (ele continua bloqueando e não produz nada)

result='node /var/www/animekyun/node/node_modules/peerflix/app.js $torrent -r -q &'

Isso não parece funcionar. A saída é de 2 linhas que eu quero armazenar em uma variável como uma matriz. Dessa forma, posso usar a saída no restante do meu script.

    
por Ortix92 18.11.2014 / 22:12

2 respostas

1

Não testado, mas isso pode funcionar com um FIFO:

filename=/tmp/my.fifo
mkfifo $filename
node /var/.../app.js $torrent -r -q >$filename &
{ read first_line; read second_line; } <$filename

# do something with "$first_line" and "$second_line"
    
por 18.11.2014 / 23:09
0

O que você quer (no meu entender) é impossível. Você não pode coletar a saída (com substituição de comando) e então executar o programa em segundo plano. pela simples razão de que a saída é coletada durante todo o tempo de vida de um processo. Um processo pode viver muito depois de ter parado de produzir, mas o shell não pode saber disso.

Você tem que redirecionar a saída para um arquivo e ter que verificar de alguma forma (isso é específico do aplicativo) quando a saída estiver completa (se você não quiser esperar que o processo termine).

node /var/www/animekyun/node/node_modules/peerflix/app.js $torrent -r -q >file &
[...]
result="$(<file)"
    
por 18.11.2014 / 22:55