Заставить фоновую сложную задачу самому фг?
Я часто запускаю простую задачу мониторинга, такую как следующее:
(sleep 600 && ls -lh /path/to/files)&
Возможно ли, чтобы процесс частично отвлекся от самого процесса? Например, чтобы захватить идентификатор работы в $jobid
(или аналогичный), а затем, когда sleep
заканчивается, сделать fg $jobid
?
Я знаю, что для этого может потребоваться более сложный bash-fu, но было бы неплохо увидеть любые решения (особенно, если это возможно fg
если нет другого запущенного интерактивного процесса).
1 ответ
Решение
Неинтерактивный скрипт по умолчанию отключает управление заданиями, но вы можете включить его с помощью set -m
или же set -o monitor
, Вот пример сценария:
# 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"
Вот его вывод при запуске с трассировкой (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