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 sleep
termine, 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 fg
si 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 -m
o 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