it-roy-ru.com

Как запустить несколько фоновых команд в bash в одной строке?

Я обычно запускаю несколько команд с чем-то вроде этого:

sleep 2 && sleep 3

или же

sleep 2 ; sleep 3

но что, если я хочу запустить их обоих в фоновом режиме из одной команды командной строки?

sleep 2 & && sleep 3 &

не работает И ни одна не заменяет && на ;

Есть ли способ сделать это?

128
Palace Chan

Как именно вы хотите их запустить? Если вы хотите, чтобы они запускались в фоновом режиме и запускались последовательно , вы должны сделать что-то вроде этого:

(sleep 2; sleep 3) &

Если, с другой стороны, вы хотите, чтобы они выполнялись в параллель в фоновом режиме, вы можете вместо этого сделать это:

sleep 2 & sleep 3 &

И эти два метода могут быть объединены, такие как:

(sleep 2; echo first finished) & (sleep 3; echo second finished) &

Bash, будучи bash, часто для решения одной и той же задачи часто используют множество различных методов, хотя иногда с небольшими различиями между ними.

226
Kitsune

Вам нужно добавить несколько паренов в вашей последней версии -

(sleep 2 &) && (sleep 3 &)

или это тоже работает - 

(sleep 2 &) ; (sleep 3 &)
40
iagreen

для запуска нескольких фоновых команд необходимо добавить & в конец каждой команды . ex: (command1 &) && (command2 &) && (command3 &)

7
saeed

Ответы выше используют круглые скобки. Bash также может использовать фигурные скобки для аналогичной цели:

{ sleep 2 && sleep 3; } &

Обратите внимание, что скобки более требовательны к синтаксису - пробел после {, пробел перед } и последняя точка с запятой обязательны. В некоторых ситуациях брекеты более эффективны, потому что они не разветвляют новую подоболочку. В этом случае я не знаю, если это имеет значение.

5
Greg Reagle

Это работает:

$(sleep 2 &) && sleep 3 &

Также вы можете сделать:

$(sleep 2 && sleep 3) &
4
higuaro

У меня тоже та же миссия .. Я попробовал (sleep2 ; fg )& sleep3 ; fg, она работает . И когда вы предварительно удвоили Ctrl + C, два процесса могут быть остановлены.

0
dingyang wang

Если вы хотите запустить несколько команд последовательно , есть действительно простой метод, который работает везде: создание файла! Преимущество этого метода в том, что он чистый и простой.

Сначала создайте файл с именем, например, commands.sh. Затем поместите свои команды там. Вот пример:

commands.sh:

#!/system/bin/sh

sleep 3;
sleep 2;

Хорошо, теперь мы на последнем этапе. Чтобы запустить команды в фоновом режиме (последовательно), просто запустите:

$ sh commands.sh &
0
MAChitgarha