Как sh -e взаимодействует с &?

Я использую sh ( dash ) на Ubuntu (lucid), и manpage имеет это, чтобы сказать о -e :

            -e errexit Если это не интерактивно, немедленно выйдите, если какая-либо непроверенная команда завершится с ошибкой.
                             Статус выхода команды считается явно протестированным
                             если команда используется для управления if, elif, while или until;  или
                             если команда является левым операндом операции «&&» или «||»
                             тор.

Что происходит, если команда фона не работает? И делает ли bash другому в этом отношении?

  • +/- после выполнения задания в фоновом режиме
  • В zsh, как я могу быстрее отказаться от процесса переднего плана?
  • перенаправление вывода работы фонового задания в bash
  • Вилка SSH убивает соединение
  • Как использовать / отправлять сигналы в командной строке для любой программы (например, dd)
  • Функция Shell, чтобы проверить, есть ли приостановленный процесс, являющийся дочерним элементом этой оболочки?
  • В чем разница между запуском программы в качестве демона и разворачиванием ее в фоновом режиме с помощью «&»?
  • Четыре задачи параллельно ... как это сделать?
  • One Solution collect form web for “Как sh -e взаимодействует с &?”

    Это довольно просто проверить. С -e :

     % bash -e -c 'false & echo waiting; if wait $!; then echo success; else echo failure; fi' waiting failure 

    Поэтому, если фоновая команда не работает, оболочка не будет автоматически выходить ( -e недостаточно).

    Если вы wait за пределы явного теста, wait вернет код возврата неудавшегося фонового процесса. В этом случае, если задано -e , оболочка выйдет:

     % bash -e -c 'false & echo waiting; wait $!; echo returned' waiting 

    Те же результаты с bash или sh или zsh .

    Linux и Unix - лучшая ОС в мире.