Для команд удара действительно ли возможно продолжиться перед результатом предыдущей команды?

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

т.е.: Если Вы работаете, следующие две команды из сценария удара это возможный для вещей перестать работать?

cp /tmp/a /tmp/b
cp /tmp/b /tmp/c
40
задан corydoras 7 March 2010 в 23:10
поделиться

6 ответов

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

command1 &
command2 &
command3 &
wait

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

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

В руководстве по bash есть больше информации (ищите wait, примерно две трети пути вниз).

58
ответ дан 27 November 2019 в 01:37
поделиться

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

cp /tmp/a /tmp/b &
cp /tmp/a /tmp/c &
10
ответ дан 27 November 2019 в 01:37
поделиться

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

foo args &

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

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

3
ответ дан 27 November 2019 в 01:37
поделиться

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

1
ответ дан 27 November 2019 в 01:37
поделиться

Думаю, вам нужна концепция подоболочки. Вот одна ссылка, которую я только что искал: http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/subshells.html

0
ответ дан 27 November 2019 в 01:37
поделиться

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

1
ответ дан 27 November 2019 в 01:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: