Я хотел бы выполнить объединенные в цепочку команды, но некоторые последовательны, и другие находятся в фоне.
Выполнение этой команды:
echo 1 && echo 2 & echo 3 && echo 4
Я хотел бы добраться:
1
2 (background)
3
4
Но я добираюсь:
3
4
1
2
Более реалистический пример:
compile &&
run server & (background, used by tests below)
run test 1 &&
run test 2 &&
kill server
Как я могу сделать это с помощью удара?
Спасибо!
Я думаю, что то, что Вы просите:
echo 1 && { echo 2 & } && echo 3 && echo 4
В вышеупомянутом echo 1
выполнения на переднем плане, но echo 2
фон выполнений.
Примечание, которое &&
после echo 2
не может делать то, что Вы думаете. Рассмотрите:
$ echo 1 && { false & } && echo 3 && echo 4
1
[2] 28445
3
4
вышеупомянутые шоу, что echo 3
выполнения даже при том, что вторая команда false
возвращает отказ. Это вызвано тем, что код возврата для фонового процесса не доступен, когда решение запуститься echo 3
принято.
Позволяют нам рассмотреть Ваш более реалистический пример:
compile && { run server & } && run test 1 && run test 2 && kill server
run test 1
запустится независимо от того, успешно выполнился ли run server
или отказавший. Хуже, чем это, run test 1
может запуститься, прежде run server
закончил настраивать сервер. Быстрое исправление должно задержаться run test 1
к достаточному количеству времени, когда Вы уверены, что run server
закончил делать его установку:
compile && { run server & } && sleep 1 && run test 1 && run test 2 && kill server
, С другой стороны, необходимо было бы знать что-то [приблизительно 1 117] так, чтобы можно было протестировать его успешную установку.
фигурные скобки, {...}
, создают список. Таким образом конструкция { echo 2 & }
позволяет нам работать echo 2
с эффектом оператора &
, ограниченного просто командами в списке.
&&
логичный удар и. Команда после эти &&
выполняется, только если предшествующая команда успешно выполняется, то есть, возвраты с кодом 0.
Можно использовать nohup для выполнения команды в фоне: повторите 1 & & nohup повторяют 2 & & отзовитесь эхом 3
1
nohup: ignoring input and appending output to ‘nohup.out’
3