Как запустить несколько фоновых команд в 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 в два раза, два процесса могут быть остановлены.