Freqüentemente, executarei uma tarefa de monitoramento simples como a seguinte:
(sleep 600 && ls -lh /path/to/files)&
É possível que o processo seja retirado do fundo no meio do caminho? Por exemplo, para obter o ID do trabalho $jobid
(ou similar) e, quando sleep
terminar, faça um fg $jobid
?
Isso pode exigir um bash-fu mais complexo, estou ciente, mas seria bom ver qualquer solução (especialmente se for possível apenas fg
se não houver outro processo interativo em execução).
Responder1
Um script não interativo tem o controle de tarefas desativado por padrão, mas você pode habilitá-lo com set -m
ou set -o monitor
. Aqui está um exemplo de script:
# 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á o resultado 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