При выполнении команд из сценария удара удар всегда ожидает предыдущей команды для завершения, или это только запускается, команда тогда переходят к следующей?
т.е.: Если Вы работаете, следующие две команды из сценария удара это возможный для вещей перестать работать?
cp /tmp/a /tmp/b
cp /tmp/b /tmp/c
Да, если вы не сделаете ничего другого, то команды в сценарии bash будут сериализованы. Вы можете сказать bash выполнять кучу команд параллельно, а затем ждать, пока они все закончатся, но делать что-то вроде этого:
command1 &
command2 &
command3 &
wait
Амперсанды в конце каждой из первых трех строк говорят bash выполнять команду в фоновом режиме. Четвертая команда, wait
, указывает bash подождать, пока все дочерние процессы не завершатся.
Обратите внимание, что если вы поступите таким образом, вы не сможете получить статус выхода дочерних команд (и set -e
не сработает), поэтому вы не сможете определить, удалось ли им выполнить команду или нет обычным способом.
В руководстве по bash есть больше информации (ищите wait
, примерно две трети пути вниз).
добавьте '&' в конце команды, чтобы запустить ее параллельно. Однако это странно, потому что в вашем случае вторая команда зависит от конечного результата первой. Либо используйте последовательные команды, либо скопируйте в b и c из a следующим образом:
cp /tmp/a /tmp/b &
cp /tmp/a /tmp/c &
Если вы явно не укажете bash запустить процесс в фоновом режиме, он будет ждать, пока процесс не завершится. Поэтому если вы напишете так:
foo args &
bash продолжит работу, не дожидаясь выхода foo. Но если вы явно не переведете процесс в фоновый режим, bash будет ждать его завершения.
Технически, процесс может эффективно перевести себя в фоновый режим, создав дочерний процесс и выйдя из него. Но поскольку эта техника используется в основном долгоживущими процессами, это не должно вас затронуть.
В общем, если только команды в сценарии оболочки не отправлены явно в фоновый режим или не переключены в качестве демона, они сериализованы.
Думаю, вам нужна концепция подоболочки. Вот одна ссылка, которую я только что искал: http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/subshells.html
Они ждут, пока не завершится предыдущая. Однако вы можете написать 2 сценария и запустить их в отдельных процессах, чтобы они выполнялись одновременно. Это дикое предположение, но я думаю, что вы получите ошибку доступа, если процесс попытается записать в файл, который читается другим процессом.