У меня есть последовательность маленьких скриптов удара, которые я должен запустить в особом порядке.
Я полагал, что мог сделать это путем создания сценария, который выполняет каждый сценарий, один за другим, потому что большинство сценариев берет вход от выходных файлов предыдущего.
Однако, когда я пытаюсь выполнить сценарий, он пытается запустить каждый из внутренних скриптов сразу и возвращает много из no such file or directory
ошибки.
У меня есть свой сценарий, форматирующий как это.
#!/bin/bash
bash script1.sh
bash script2.sh
bash script3.sh
И я не хочу выполнять script2.sh, пока script1.sh не закончил выполняться. Существует ли простой способ сделать это?
Править: Я забыл упоминать, что у меня есть несколько сценариев Python в списке также. Не уверенный, если это изменяет что-нибудь.
Правильное решение для Вас зависит от того, что Вы хотите:
&&
только выполнит второе, если первое выходы успешно ||
только выполнит второе, если первое не выйдет успешно , Если Вы хотите, чтобы вторая команда была выполнена после первого , неважно , выходит ли это успешно или нет, можно использовать или ;
или & wait
:
bash script1.sh ;
bash script2.sh & wait
bash script3.sh
Вы могли попытаться получить сценарии
#!/bin/bash
. script1.sh
. script2.sh
. script3.sh
, Если существуют переменные, которые должны быть удалены после каждого сценария, включить его в круглые скобки, т.е.
#!/bin/bash
(
. script1.sh
)
(
. script2.sh
)
(
. script3.sh
)
, Другой possiblility должен назвать сценарии непосредственно:
#!/bin/bash
./script1.sh
./script2.sh
./script3.sh
, Если Вы хотите, чтобы все фоновые процессы, порожденные сценариями, закончились, добавьте wait
для ожидания их
, например,
./script1.sh
wait
./script2.sh
<час> текущее решение работает одновременно, поскольку bash
открывает новую оболочку и выполняет это
Сделайте это как этот путь.
bash script1.sh && bash script2.sh && bash script3.sh
Или этот путь:
bash script1.sh &&
bash script2.sh &&
bash script3.sh
Это удостоверится, если предыдущий сценарий вышел успешно, то следующий сценарий выполнится.
Или использование ;
вместо этого, необходимо ли выполнить следующий сценарий независимо предыдущего сценария, успех, из которого выходят, или отказавший.
bash script1.sh ; bash script2.sh ; bash script3.sh
Добавьте set -e
к началу всех сценариев. Когда эта опция будет идти, любой сбой команды заставит целый сценарий перестать работать, как то, что произошло бы, если бы команды были разделены с '& &';. спецификация
"большинство сценариев берет вход от выходных файлов предыдущего", походит на то, для чего make
. Рассмотрите использование его.