Правильно ли я предполагаю, что, когда ;
объединяет две команды в строке, Bash всегда ожидает выхода первой команды перед выполнением второй команды? И, аналогично, в сценарии оболочки, содержащем две разные команды в разных строках, Bash всегда ждет завершения команды в первой строке, прежде чем выполнить команду во второй строке?
Если это так, есть ли способ выполнить две команды в одной строке или в сценарии, чтобы вторая команда не дожидалась окончания первой команды?
Кроме того, разные строки в сценарии оболочки эквивалентны отдельным строкам, соединенным ;
или &&
?
Ответы:
Вы правы, команды в скриптах по умолчанию выполняются последовательно.
Вы можете запустить команду в фоновом режиме, добавив к ней суффикс
&
(один амперсанд).Команды в отдельных строках эквивалентны командам, объединенным
;
по умолчанию. Если вы скажете своей оболочке прервать работу с ненулевыми кодами выхода (set -e
), сценарий будет выполнен так, как если бы все команды были объединены&&
.источник
Чтобы ответить на второй вопрос, вы можете использовать
&
команду в фоновом режиме и продолжить работу со скриптом, не дожидаясь его завершения.Если вы запускаете это на интерактивном терминале (вместо сценария), вы можете использовать его,
fg
чтобы вернуть фоновую команду обратно в фокус илиjobs
просмотреть список фоновых задач.источник