¿Forzar que una tarea compleja en segundo plano se active por sí sola?

¿Forzar que una tarea compleja en segundo plano se active por sí sola?

A menudo ejecuto una tarea de monitoreo simple como la siguiente:

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

¿Es posible eliminar el fondo del proceso a mitad de camino? Por ejemplo, para capturar la identificación del trabajo $jobid(o similar) y luego, cuando sleeptermine, haga un fg $jobid?

Soy consciente de que esto puede requerir un bash-fu más complejo, pero sería bueno ver cualquier solución (especialmente si es posible solo fgsi no hay otro proceso interactivo en ejecución).

Respuesta1

Un script no interactivo tiene el control de trabajo desactivado de forma predeterminada, pero puede habilitarlo con set -mo set -o monitor. Aquí hay un script de ejemplo:

# 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"

Aquí está su resultado cuando se ejecuta con rastreo ( 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

información relacionada