Как запустить несколько фоновых команд в bash в одной строке?
Я обычно запускаю несколько команд с чем-то вроде этого:
sleep 2 && sleep 3
или
sleep 2 ; sleep 3
но что, если я хочу запустить их в фоновом режиме из одной команды командной строки?
sleep 2 & && sleep 3 &
не работает. И не заменяет &&
на ;
Есть ли способ сделать это?
Ответы
Ответ 1
Как вы хотите, чтобы они выполнялись? Если вы хотите, чтобы они запускались в фоновом режиме и запускались последовательно, вы бы сделали что-то вроде этого:
(sleep 2; sleep 3) &
Если, с другой стороны, вы хотели бы, чтобы они выполнялись параллельно в фоновом режиме, вы можете сделать это:
sleep 2 & sleep 3 &
И эти два метода могут быть объединены, например:
(sleep 2; echo first finished) & (sleep 3; echo second finished) &
Bash bash, часто существует множество разных методов для выполнения одной и той же задачи, хотя иногда и с небольшими различиями между ними.
Ответ 2
Вам нужно добавить несколько парнеров в свою последнюю версию -
(sleep 2 &) && (sleep 3 &)
или это также работает -
(sleep 2 &) ; (sleep 3 &)
Ответ 3
для запуска нескольких фоновых команд вам нужно добавить &
конец каждой команды.
например:
(command1 &) && (command2 &) && (command3 &)
Ответ 4
В приведенных выше ответах используются круглые скобки. Bash также может использовать фигурные скобки для аналогичной цели:
{ sleep 2 && sleep 3; } &
Обратите внимание, что фигурные скобки более разборчивы по синтаксису - пробел после {
, пробел перед }
и конечная точка с запятой. В некоторых ситуациях скобки более эффективны, потому что они не разветвляют новую подоболочку. В этом случае я не знаю, имеет ли это значение.
Ответ 5
Это работает:
$(sleep 2 &) && sleep 3 &
Также вы можете сделать:
$(sleep 2 && sleep 3) &
Ответ 6
У меня тоже та же миссия.
Я попробовал (sleep2 ; fg )& sleep3 ; fg
, он работает.
И когда вы будете преследовать ctrl + c в два раза, два процесса могут быть остановлены.