Как выполнить несколько команд в Bash, некоторые в фоновом режиме

701
pcnate

Я хотел бы выполнить несколько команд в bash, но некоторые из них выполняются в фоновом режиме. Лучший способ объяснить это - использовать следующую команду, которая не работает ...

for@barpc:~> (sleep 30;command1;command2 param ) & ; anotherCommand 

Я полагаю, это можно принять за два вопроса:

  1. Как прекратить & в команде?
  2. Что может быть лучше для этого?

Другие детали, если они имеют значение:

  • Opensuse 13.2
  • гном-оболочки
2

2 ответа на вопрос

4
Gordon Davisson

All you need to do is remove the ;. & acts as a command separator by itself, so adding ; after that is invalid.

(sleep 30; command1; command2 param ) & anotherCommand 

(The spaces after semicolons aren't needed, I just find it easier to read this way. This is one of the few spots where spaces are optional in shell syntax -- most places, they're either required or forbidden.)

As for better ways of doing this... that really depends on exactly what you're trying to do. We'd need more info to make better suggestions.

Пожалуйста, сообщите об этом, это объясняет, * почему * код OP не работал, вместо того, чтобы слепо бросать скобки, надеясь, что это сработает. Darkhogg 8 лет назад 0
3
MariusMatutiae

You should try

(sleep 5; ls) & echo "Now" 

This works as you wish it to.

Вау, это так просто, что было очевидно. Спасибо! pcnate 8 лет назад 1
Имейте в виду, что, выполнив это, вы добавили ненужную вложенную оболочку, которая не позволит вам ждать завершения фоновой работы, если вам когда-либо понадобится. Darkhogg 8 лет назад 0

Похожие вопросы