Я думаю, ви хочете цього:
myCommand1 & myCommand2 &
Це запускається myCommand1і надсилає його на другий план, після якого слідує амперсанд, потім негайно запускається myCommand2і відправляється також на задній план, тому вивільняючи оболонку знову.
Списки
Для кращого розуміння ви можете замінити трубопровід з допомогою команди тут.
Список - це послідовність одного або декількох трубопроводів, розділених одним з операторів ; , & , && або || , і необов'язково припиняється одним із
; , & , або .
Якщо команду припиняє оператор управління & , оболонка виконує команду у фоновому режимі в нижній частині. Оболонка не чекає завершення команди, а стан повернення - 0. Команди, розділені а ; виконуються послідовно; оболонка чекає, коли кожна команда завершиться по черзі. Статус повернення - це стан виходу останньої виконаної команди.
Списки AND і OR - це послідовності одного або декількох трубопроводів, розділених && та || оператори управління відповідно.
Джерело:man bash
Розбимо це на приклади. Список можна створити, комбінуючи команди та відокремивши їх однією з таких ; & && ||:
command1 ; command2 # runs sequentially
command1 && command2 # runs sequentially, runs command2 only if command1 succeeds
command1 || command2 # runs sequentially, runs command2 only if command1 fails
command1 & command2 # runs simultaneously
Ви можете припинити списки з одним з них: ; & <newline>.
Зазвичай ви виконуєте команду або список, натискаючи Enter, що дорівнює <newline>. Точка з комою ;служить тій самій цілі, особливо в сценаріях. Ampersand, &однак, запускає команди (и) у піддіаграмі на задньому плані, негайно звільняючи оболонку.
Ви можете використовувати круглі ()або фігурні дужки {}для подальших списків груп, різниця полягає в тому, що круглі дужки породять нижню частину, а фігурні - ні. Фігурним дужкам потрібний пробіл після першого та крапки з комою або новою лінією перед дужкою, що закривається. Наприклад:
# if c1 succeeds start a shell in the background
# and run c2 and c3 sequentially inside it
c1 && ( c2 ; c3 ) &
# run c1 and if it succeeds c2 sequentially as a group command
# if c1 or c2 fail run c3 in the background
{ c1 && c2 ;} || c3 &
Це може стати досить складним, якщо ви не впевнені у використанні trueта falseперевірити, чи працює будівництво так, як очікувалося:
$ { true && true ;} || echo 2
$ { true && false ;} || echo 2
2
Контроль роботи
У jobsкоманді відображає список фонових завдань, які працюють або недавно закінчили в поточній оболонці. Існує ряд комбінацій клавіш та команд для управління роботою:
- Ctrl+ Zвводить символ призупинення, який змушує зупинити процес, який зараз працює на передньому плані, він не припиняється, але залишається у
jobsсписку
- Ctrl+ Yвводить символ відкладеної зупинки, який змушує зупинити процес, який зараз працює на передньому плані, коли він намагається прочитати вхід з терміналу
fg= %виводить процес на перший план, запускаючи його, якщо потрібно, ви можете вказати процес наступним чином:
% # last process in the jobs list
%1 # 1st process in the jobs list
%abc # process beginning with the string “abc”
%?abc # process containing the string “abc” anywhere
bg= %&приймає процес на задній план, запускаючи його, якщо потрібно:
%& # last process in the jobs list
%1& # 1st process in the jobs list
%abc& # process beginning with the string “abc”
%?abc& # process containing the string “abc” anywhere
wait чекає закінчення фонового процесу і повертає його статус припинення:
wait %1 # 1st process in the jobs list
Уявіть, що ви розпочали тривалий процес ( jobsвиявляє, що це номер 3), а потім зрозумійте, що ви хочете призупинити роботу комп'ютера після його завершення, а echoтакож повідомлення, якщо процес не вдався:
wait %3 || echo failed ; systemctl suspend