Управление заданиями с использованием fg
и bg
доступно только для интерактивных оболочек (т. Е. При наборе команд в терминале).Обычно сценарии оболочки выполняются в неинтерактивных оболочках (по той же причине, по которой псевдонимы не работают в сценариях оболочки по умолчанию)
Поскольку PID уже хранится в переменной, приоритетный процесс аналогичен ожиданию наэто (см. Job Control Builtins ).Например, вы можете просто сделать
wait "$pid"
Также у вас есть базовая версия coproc bash
встроенная , которая позволяет получать стандартные выходные сообщения, полученные из фоновых команд.Он предоставляет два файловых дескриптора, хранящихся в массиве, с помощью которых можно читать выходные данные из stdout или вводить входные данные в его стандартный
coproc fdPair interactive_command
Синтаксис обычно coproc <array-name> <cmd-to-bckgd>
.Массив заполняется встроенными идентификаторами файловых дескрипторов.Если переменная не используется явно, она заполняется в переменной COPROC
.Таким образом, ваше требование может быть записано как
coproc fdPair interactive_command
IFS= read -r -u "${fdPair[0]}" firstLine
printf '%s\n' "$firstLine"