Подтвердить что ты не робот

Возможно ли, чтобы команды bash продолжались до результата предыдущей команды?

При запуске команд из bash script, bash всегда ждет завершения предыдущей команды или просто запускает команду, а затем переходит к следующей?

ie: Если вы запускаете следующие две команды из bash script, возможно ли, чтобы что-то не получилось?

cp /tmp/a /tmp/b
cp /tmp/b /tmp/c
4b9b3361

Ответ 1

Да, если вы ничего не делаете, команды в bash script сериализуются. Вы можете сказать, что bash запускает кучу команд параллельно, а затем ждет их завершения, но делает что-то вроде этого:

command1 &
command2 &
command3 &
wait

Амперсанды в конце каждой из первых трех строк сообщают bash выполнить команду в фоновом режиме. Четвертая команда wait сообщает bash ждать, пока все дочерние процессы не выйдут.

Обратите внимание: если вы так поступите, вы не сможете получить статус выхода дочерних команд (и set -e не будет работать), поэтому вы не сможете определить, были ли они успешными или не удалось обычным способом.

bash manual содержит дополнительную информацию (поиск wait, примерно две трети пути вниз).

Ответ 2

добавить '&' в конце команды, чтобы запустить его параллельно. Однако это странно, потому что в вашем случае вторая команда зависит от конечного результата первого. Либо используйте последовательные команды, либо скопируйте их в b и c из следующего:

cp /tmp/a /tmp/b &
cp /tmp/a /tmp/c &

Ответ 3

Если вы явно не сообщите bash, чтобы запустить процесс в фоновом режиме, он будет ждать завершения процесса. Поэтому, если вы напишете это:

foo args &

bash будет продолжаться, не дожидаясь выхода foo. Но если вы явно не помещаете этот процесс в фоновом режиме, bash будет ждать его выхода.

Технически, процесс может эффективно помещаться в фоновом режиме, разворачивая ребенка, а затем выходить. Но поскольку эта техника используется в основном долгоживущими процессами, это не должно влиять на вас.

Ответ 4

В общем случае, если явно не отправлено на задний план или не отключено в качестве демона, команды в оболочке script будут сериализованы.

Ответ 5

Они ждут завершения предыдущего. Однако вы можете написать 2 скрипта и запустить их в отдельных процессах, чтобы их можно было выполнить одновременно. Это действительно дикая догадка, но я думаю, вы получите ошибку доступа, если процесс пытается записать в файл, который читается другим процессом.