Força uma tarefa complexa em background a se auto?

0

Frequentemente executarei uma tarefa de monitoramento simples como a seguinte:

(sleep 600 && ls -lh /path/to/files)&

É possível que o processo de-background se parta? Por exemplo, para pegar o ID do trabalho em $jobid (ou similar), e quando o sleep terminar, faça um fg $jobid ?

Isso pode exigir um pouco de bash-fu mais complexo, estou ciente, mas qualquer solução seria legal de ver (especialmente se for possível apenas fg se não houver nenhum outro processo interativo em execução).

    
por warren 17.08.2011 / 00:47

1 resposta

1

Um script não interativo tem o controle de trabalho desativado por padrão, mas você pode ativá-lo com set -m ou set -o monitor . Aqui está um script de exemplo:

# turn on job control
set -o monitor

# start a background task
( sleep 10 && echo "slept 10 seconds" ) &

# do something else
sleep 5
echo "slept 5 seconds"

# bring the background task into the foreground
fg

echo "done"

Aqui está sua saída quando executado com rastreamento ( bash -x script.sh ):

+ set -o monitor
+ sleep 5
+ sleep 10
+ echo 'slept 5 seconds'
slept 5 seconds
+ fg
( sleep 10 && echo "slept 10 seconds" )
+ echo 'slept 10 seconds'
slept 10 seconds
+ echo done
done
    
por 10.09.2011 / 00:17