Saída do shell de um comando como entrada para outro

0

Estou tentando automatizar o Forever JS para manter meu servidor de desenvolvimento em execução e, para isso, preciso verificar e parar o sempre processo para iniciar outro. Ao executar

sudo forever list

Eu recebo a seguinte saída:

info:    Forever processes running
data:        uid  command         script forever pid   id logfile                        uptime       
data:    [0] 0NQH /usr/bin/nodejs app.js 17047   17049    /home/ubuntu/.forever/0NQH.log 0:2:4:58.594

Da saída acima eu preciso do pid que é 17049 atualmente e o alimente para o próximo comando da seguinte forma:

sudo forever stop {{pidfromabove}}

Para conseguir isso, no meu script, experimentei muitas coisas, principalmente tentando encontrar as duas sequências entre app.js e / home , mas por algum motivo continua imprimindo a linha inteira. Eu tentei diferentes combinações de sed e awk. Como faço para obter o pid acima para alimentar o próximo comando stop ?

    
por user3677331 22.02.2016 / 10:56

2 respostas

1

Isso parece um caso de uso para awk . Se você tem certeza de que o formato de saída é estável para que o PID no qual você está interessado seja sempre o 7º elemento da linha, isso imprimirá o PID para app.js :

sudo forever list | awk '/app\.js/ { print $7 }'
    
por 22.02.2016 / 11:10
0

O problema encontrado pode ser porque a saída está em stderr, não em stdout. Se este for o caso, você pode tentar:

sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) //'

Deve responder apenas o segundo pid.

Então você poderia fazer:

sudo forever stop 'sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) //''
    
por 22.02.2016 / 11:04