bash - перенести фоновый скрипт на передний план после смерти родителя

Я пишу сценарий, который будет запускаться со съемного носителя, но требует, чтобы этот носитель был размонтирован во время выполнения. Он не может просто делать это прямо, потому что тогда среда занята. Таким образом, я разбил скрипт на 2 части - одна выполняется перед размонтированием, которая копирует вторую часть скрипта в ramfs и запускает ее, вторая часть - это размонтирование madia, выполнение работы, а затем самоудаление и размонтирование созданных ramfs. Но проблема в том, что асинхронный скрипт, запускаемый в bash, запускается на переднем плане, и я не знаю, как этот скрипт мог выдвинуть себя программно на передний план для получения пользовательского ввода.

Так что мне нужно что-то вроде этого:

script1 does his job
script1 starts script2
script1 dies
script2 goes to foreground
script2 unmounts media with script1
script2 does his job
scirpt2 starting async command and dies
async command unmounts ramfs

1 ответ

Ты хочешь wait:

script1 &
JOB_SCRIPT1=$!
script2 &
JOB_SCRIPT2=$!
wait $JOB_SCRIPT1
echo "this action takes place after script1 but perhaps during script2"
wait $JOB_SCRIPT2
echo "now both jobs are complete"
async command unmounts ramfs

Тем не менее, это не похоже на то, что вы хотите; кажется, что есть некоторые фоновые задания, ускоренные script1, Это сложнее контролировать. Возможно попробовать wait без аргументов и посмотрим, подхватывает ли это тот факт, что существуют фоновые процессы (но я сомневаюсь, поскольку они не являются частью одной оболочки):

script1 &
wait
script2
async command unmounts ramfs

(Амперсанд в этой версии на самом деле ничего не должен делать, но может указать оболочку на то, что вы хотите. Вам придется попробовать ее, чтобы увидеть.)

Другие вопросы по тегам