Я столкнулся с проблемой головной боли.
Я хочу выполнять несколько команд в фоновом режиме, поэтому я хочу запускать их в bash одну за другой. Легко запустить одну команду в оболочке linux в фоновом режиме, вот так:
myCommand &
Также легко запустить несколько команд, вот так:
myCommand1 && myCommand2
или
myCommand1 ; myCommand2
Но если я хочу запустить несколько команд в фоновом режиме, я попробовал следующий формат команды, но не получилось:
myCommand1 & && myCommand2 &
или
myCommand1 & ; myCommand2 &
Оба формата не работают. Как я могу запустить несколько команд, которые находятся &
в одной командной строке?
command-line
bash
Часы ZHONG
источник
источник
Ответы:
Используйте ().
Если вы хотите запустить их последовательно:
или
Если вы хотите, чтобы они работали параллельно:
В bash вы также можете использовать это (пробел за {и;; обязателен):
источник
(myCommand1 &) && (myCommand2 &)
будет работать,myCommand2
даже еслиmyCommand1
не удалось.Я полагаю, вы хотите это:
Он запускается
myCommand1
и отправляет его в фоновый режим, за которым следует амперсанд, а затем немедленно запускаетсяmyCommand2
и отправляет его также в фоновый режим, поэтому снова запускается оболочка.Списки
Для лучшего понимания вы можете заменить трубопровод с помощью команды здесь.
Давайте разберем это на примеры. Вы можете создать список, комбинируя команды и разделяя их одним из них
; & && ||
:Вы можете прекратить списки с одним из них:
; & <newline>
.Обычно вы выполняете команду или список, нажимая Enter, что равно
<newline>
. Точка с запятой;
служит той же цели, особенно в сценариях.&
Однако Ampersand запускает команду (-и) в подоболочке в фоновом режиме, немедленно выпуская оболочку.Вы можете использовать круглые
()
или фигурные скобки{}
для дальнейшей группировки списков, с той разницей, что круглые скобки порождают подоболочки, а фигурные - нет. Кудрявые скобки требуют пробела после первой и точки с запятой или новой строки перед закрывающей скобкой. Например:Это может быть довольно сложно, если вы не уверены в том, что используете,
true
иfalse
проверить, работает ли конструкция должным образом:Контроль работы
Команда
jobs
отображает список фоновых заданий, которые выполняются или недавно были завершены в текущей оболочке. Существует несколько сочетаний клавиш и команд для управления заданиями:jobs
спискеfg
=%
выводит процесс на передний план, запуская его при необходимости, вы можете указать процесс следующим образом:bg
=%&
переводит процесс в фоновый режим, запуская его при необходимости:wait
ожидает завершения фонового процесса и возвращает его статус завершения:Представьте, что вы запустили длительный процесс (
jobs
показывает, что это номер 3), а затем поняли, что хотите, чтобы компьютер был приостановлен после его завершения, плюсecho
сообщение, если процесс не удался:источник
man bash
) и широко используется именно так, как задумано AFAIK - я никогда не сталкивался с чем-то странным.