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

443
warren

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

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

Возможно ли, чтобы процесс частично отвлекся от самого процесса? Например, чтобы захватить идентификатор задания $jobid(или аналогичный), а затем, когда он sleepзакончится, сделать fg $jobid?

Я знаю, что для этого может потребоваться более сложный bash-fu, но любые решения было бы неплохо увидеть (особенно, если это возможно, только fgесли не запущен другой интерактивный процесс).

0

1 ответ на вопрос

1
Kusalananda

Неинтерактивный скрипт по умолчанию отключает управление заданиями, но вы можете включить его с помощью 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" 

Вот его вывод при запуске с tracing ( 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 

Похожие вопросы