Як можна запускати кілька програм у фоновому режимі за допомогою однієї команди?


36

Як можна запускати кілька програм у фоновому режимі за допомогою однієї команди?

Я спробував команди нижче, але вони не працюють.

nohup ./script1.sh & && nohup ./script2.sh &
-bash: syntax error near unexpected token '&&'

nohup ./script1.sh & ; nohup ./script2.sh &
-bash: syntax error near unexpected token ';'

що таке єдина "команда"? Лінія удару?
Олуф Лоренцен


Можливо, я пропускаю щось очевидне, але && передбачає знання вихідного коду попередньої команди. Якщо ви працюєте з нею, код виходу не буде відомий. Яка функціональна потреба там була?
Richlv

Відповіді:


32

З точки зору синтаксису оболонки, &відокремлюються команди типу ;/ |/ &&... (хоча, звичайно, з різною смисловою). Тож просто:

cmd1 & cmd2 & cmd3 &

1
це не / цілком / правильно, ;починає наступну команду, як тільки перша закінчилася. &насправді ставить команду на другий план. просто спробуйте це:echo foo & echo bar & echo test &
Олуф Лоренцен

1
@Finkregh, звичайно. Ніхто в цьому не сумнівається. Я просто мав на увазі, що обидві окремі команди (з точки зору синтаксису) не мають ніякого впливу на те, як вони виконуються.
Стефан Шазелас

Це не зовсім те, що задавали, оскільки в питанні було вказано видачу "єдиної команди". Не є моєю відповіддю, оскільки це теж ряд команд, але вона має принаймні одну семантику однієї команди в тому, що вихід є об'єднаним, може бути перенаправлений і т. Д.
Eli Heady

"Кілька команд з однією командою", здається, є оксимороном, хоча - що це означає? Якщо це щось подібне, sudoви можете ввести пароль лише один раз, введіть його в bash -cабо подібне.
Richlv

12

У розділі "bash manpage" під заголовком " Compound Commands" є два варіанти роботи, список та групові команди.

Групова команда - це ряд команд, укладених у фігурні дужки {}. Список такий самий, додається до дужок (). Обидва можуть бути використані для фонового зображення декількох команд всередині, і, нарешті, для фонового зображення всієї колекції як набору. Конструкція списку виконує команди в підшалі, тому змінні призначення не зберігаються.

Для виконання групи команд:

{ command1 & command2 & } &

Ви також можете виконувати свої команди в списку (підпакет):

( command1 & command2 ) &

1
Ласкаво просимо. Я додав посилання до посібника. Зауважте, що ()синтаксис списку виконує вкладені команди в підрозділі, тому змінні не зберігаються всередині.
Елі Хеді

3

Інший спосіб:

$(command1 &) && command2 & 

Ні, вона виконає першу команду, потім після завершення спочатку, потім виконає іншу команду
Рахул Патіл

ви використовували &&у своєму запитанні, це означає, що спочатку виконуйте команду, потім, якщо запустити успішно, запустіть наступну команду. Якщо ви не вважаєте це, можете запуститиcommand1 & ; command2 & ;
PersianGulf

Перша команда успішно передається в bg, або виконується, ;не використовуючи жодної проблеми з цим
Rahul Patil
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.