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

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

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

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

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .