Назад | Перейти на главную страницу

Как продолжить выполнение сценария оболочки после вызова другого сценария оболочки с помощью `exec`?

У меня есть сценарий:

ACTION="build"

env -i
exec ./makelib.sh Release "${ACTION}"

env -i
exec ./makelib.sh Debug "${ACTION}"

Второй exec не выполняется. Почему и как я могу это выполнить?

exec заменит весь процесс содержимым переданной команды - в данном случае makelib.sh. Проверьте страница руководства для функции linux exec- он объясняет это подробно.

Я предполагаю, что это сценарий оболочки; если вы хотите, чтобы сценарий просто запускал другие сценарии последовательно (один за другим), вы будете использовать:

ACTION="build"

env -i
./makelib.sh Release "${ACTION}"
./makelib.sh Debug "${ACTION}"

Это будет работать ./makelib.sh Release "${ACTION}" первый; после его завершения он запустится ./makelib.sh Debug "${ACTION}". Если вы хотите, чтобы обе команды выполнялись параллельно (одновременно), вы можете фоновый процесс, используя &.

ACTION="build"

env -i
./makelib.sh Release "${ACTION}" &
./makelib.sh Debug "${ACTION}" &

Имейте в виду, что оба процесса в фоновом режиме означают, что у вас одновременно будут работать (и выводить!) Два процесса. Так что, если у вас есть вывод журнала, ваш экран, мягко говоря, будет грязным.

Надеюсь это поможет!

exec заменяет текущую оболочку переданными командами. Если вы хотите, чтобы сценарий продолжался, удалите оператор (ы) exec.

Как насчет добавления символа «&» в конец строки, если вы хотите, чтобы он выполнялся в фоновом режиме, или «&&» между первым и вторым операторами, если вы хотите, чтобы второй был условным при успешном выполнении первого?

(Мой шелл-фу слаб, поэтому я хотел бы услышать, почему это может быть неправильно, в образовательных целях.)