Как создать фон для цепочки команд?

15

Я хочу фон командную цепочку, как cp a b && mv b c && rm a.

Я пытался сделать, cp a b && mv b c && rm a &но это только фоны последнего процесса.

Как мне создать фоновую цепочку команд?

Cobra_Fast
источник

Ответы:

22

cp a b && mv b c && rm a &правильно. &имеет более низкий приоритет, чем &&. На самом деле &имеет более низкий приоритет, чем что-либо, кроме ;и newline: &находится в той же синтаксической категории, что и; , что отличается тем, что ;запускает список команд на переднем плане, а &запускает его в фоновом режиме. Вы можете проверить это для себя:

$ dash -c 'sleep 2 && echo waited & echo backgrounded'
backgrounded
$ waited

То же самое с pdksh, ksh93, bash, csh, tcsh.

Исключением является zsh, что странно несовместимо. Это задокументировано в руководстве :

Если подсписок завершен &,&| или &!, оболочка выполняет последний трубопровод в ней в фоновом режиме, а не ждать его , чтобы закончить (обратите внимание на отличие от других оболочек , которые выполняют весь подсписок в фоновом режиме).

К сожалению, zsh ведет себя таким образом даже в режиме совместимости с sh или ksh. Чтобы убедиться, что вся команда выполняется в фоновом режиме, поставьте вокруг нее скобки или скобки. Круглые скобки создают подоболочку, тогда как фигурные скобки - нет, но это не имеет значения (за исключением микрооптимизации в некоторых оболочках), поскольку задняя команда в любом случае находится в подоболочке.

{ cp a b && mv b c && rm a; } &
Жиль "ТАК - прекрати быть злым"
источник
8
В соответствии с Баш , { ... ; } &сделать вилку на текущем уровне процесса, в то время как ( ... ) &сделать вилку из субоболочки ... Результат такого же, но есть небольшая разница в любом случае.
Ф. Хаури
14

Вы можете поместить это в паратезы, как (cp a b && mv b c && rm a )&включить всю цепочку.

переигровка
источник
2
И, что важно, это ясно дает понять, что вся цепочка основана на заднем плане, даже для того, кто может не знать правил ограничения операторов
jackweirdy
2
Посмотрите на мой комментарий к ответу @ Gilles, я думаю, что { ... ; }это предпочтительная форма (способ).
Ф. Хаури