Forçar uma tarefa complexa em segundo plano a se auto-fg?

Forçar uma tarefa complexa em segundo plano a se auto-fg?

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 sleepterminar, 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 fgse 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 -mou 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

informação relacionada