Executar um comando em segundo plano, mas também concatenar outros comandos para ele?

0

Como eu poderia concatenar vários comandos em uma única linha, mas também executá-los todos em segundo plano? Isso não funcionou:

sleep 1m & && echo "goodbye" & && exit &.
sleep 1m & ; echo "goodbye" & ; exit &.
sleep 1m & echo "goodbye" & exit &.

Eu preciso ter todos os comandos para efetuar sessão de primeiro plano . Por exemplo, exit & deve terminar a sessão de primeiro plano.

Nota: eu uso como alternativa ao utilitário at . A história de por que eu preciso dessa alternativa é longa, mas pode-se dizer a partir dessas perguntas que fiz aqui (e apresentadas cronologicamente abaixo), infelizmente não tive uma solução satisfatória (em relação ao meu caso específico):

Aqui, a resposta por dataved parece promissora.

    
por JohnDoea 29.12.2016 / 09:33

3 respostas

1

Que tal

pid=$$; ( sleep 1; echo goodbye; kill $pid ) & echo hello
    
por 29.12.2016 / 10:09
1

Bem, IMO, a melhor maneira de fazer isso e poupar o trabalho seria usar o utilitário de tela:

1. screen -R <name-of-the-screen-session>
2. <the-command(s)> 
3. ctrl + a + d ### To exit the screen session
4. To log back: screen -x <name-of-the-screen-session>
    
por 29.12.2016 / 10:28
0

O && é um operador condicional. Ele executará o comando à direita se-e-somente-se o comando à esquerda sair com sucesso. Como você está executando o comando à esquerda em segundo plano, seu código de retorno não pode ser determinado e as coisas quebram e não funcionam como esperado.

Não use && . Você deve fazer command1 & command2 & command3 ou ( command1; command2; command3 )& . O segundo executará todos os comandos sequencialmente em um subshell que está sendo executado em segundo plano.

    
por 29.12.2016 / 10:13

Tags