Заставить фоновую сложную задачу самому фг?

Я часто запускаю простую задачу мониторинга, такую ​​как следующее:

(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
Другие вопросы по тегам