Последовательные команды

14

Правильно ли я предполагаю, что, когда ;объединяет две команды в строке, Bash всегда ожидает выхода первой команды перед выполнением второй команды? И, аналогично, в сценарии оболочки, содержащем две разные команды в разных строках, Bash всегда ждет завершения команды в первой строке, прежде чем выполнить команду во второй строке?

Если это так, есть ли способ выполнить две команды в одной строке или в сценарии, чтобы вторая команда не дожидалась окончания первой команды?

Кроме того, разные строки в сценарии оболочки эквивалентны отдельным строкам, соединенным ;или &&?

EmmaV
источник

Ответы:

26

Вы правы, команды в скриптах по умолчанию выполняются последовательно.

Вы можете запустить команду в фоновом режиме, добавив к ней суффикс &(один амперсанд).

Команды в отдельных строках эквивалентны командам, объединенным ;по умолчанию. Если вы скажете своей оболочке прервать работу с ненулевыми кодами выхода ( set -e), сценарий будет выполнен так, как если бы все команды были объединены &&.

Стивен Китт
источник
2

Чтобы ответить на второй вопрос, вы можете использовать &команду в фоновом режиме и продолжить работу со скриптом, не дожидаясь его завершения.

commandA & commandB

Если вы запускаете это на интерактивном терминале (вместо сценария), вы можете использовать его, fgчтобы вернуть фоновую команду обратно в фокус или jobsпросмотреть список фоновых задач.

rmelcer
источник