У меня возникают трудности с принятием вашего первого примера, когда вы начинаете задание в фоновом режиме, и вы говорите, что он остается в воздухе, и вы должны нажать [Enter], чтобы продолжить.
Обратите внимание, что любой вывод, производимый фоновым сценарием, будет напечатан после приглашения оболочки, создавая иллюзию пропущенного приглашения (фактически приглашение оболочки уже существует, но прокручивается вверх). Вам не нужно нажимать [Enter], чтобы ввести следующую команду!
Второй пример (exec ... &
) не имеет никакого смысла: амперсанд дает команду оболочке запустить команду как параллельный фоновый процесс, тогда как exec
указывает оболочке вообще не запускать новый процесс и выполнять новую команду " переработка "текущий процесс. Говоря технически (очень упрощенно): код программы оболочки будет заменен кодом вызываемой программы.
Заключение:
Вам не нужно нажимать [Enter] (но это не причинит вреда)
Так как скрипт оболочки запускается как параллельная задача, амперсанд может быть опущен.
Использовать exec
абсолютно логично, если команда, которая должна быть запущена, является последней из выполняемых скриптом в любом случае, поэтому жертва командной консоли спасает один бесполезный в противном случае процесс.
[добавлено:] Просто одна вещь пришла в голову, почему вы можете подумать, что вы должны нажать [Enter]:
Пока процесс оболочки отображает командную строку (в ожидании вашей следующей команды), уведомление о завершенных фоновых процессах вообще не будет.
Вы получите уведомление только тогда, когда оболочка отобразит следующую командную строку. Это также может привести к иллюзии, что «нужно нажать [Enter], чтобы позволить завершить фоновый процесс».