Для одночасного запуску команд можна використовувати &
роздільник команд.
~$ command1 & command2 & command3
Це почнеться command1
, потім запуститься у фоновому режимі. Те саме з command2
. Потім воно починається command3
нормально.
Вихід усіх команд буде зібраний разом, але якщо це не для вас проблема, це було б рішенням.
Якщо ви хочете отримати окремий погляд на вихід пізніше, ви можете передавати висновок кожної команди в tee
, що дозволяє вам вказати файл для дзеркального виводу.
~$ command1 | tee 1.log & command2 | tee 2.log & command3 | tee 3.log
Вихід, ймовірно, буде дуже безладним. Щоб протистояти цьому, ви можете дати виводу кожної команди префікс, використовуючи sed
.
~$ echo 'Output of command 1' | sed -e 's/^/[Command1] /'
[Command1] Output of command 1
Тож якщо ми зведемо все це разом, отримаємо:
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
[Command1] Starting command1
[Command2] Starting command2
[Command1] Finished
[Command3] Starting command3
Це дуже ідеалізована версія того, що ви, мабуть, збираєтесь побачити. Але це найкраще, про що я можу подумати зараз.
Якщо ви хочете зупинити їх усі одразу, можете скористатися вбудовою trap
.
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 & command2 & command3
Це буде виконуватися command1
і command2
у фоновому режимі, і command3
на передньому плані, що дозволяє вбити його за допомогою Ctrl+ C.
Коли ви вбиваєте останній процес з Ctrl+ Cна kill %1; kill %2
команди виконуються, тому що ми з'єднали їх виконання з прийомом на переривати СИГНАЛ, річ відправленого натисканням Ctrl+ C.
Вони відповідно вбивають 1-й та 2-й фонові процеси (ваші command1
та command2
). Не забудьте видалити пастку, після закінчення роботи з командами trap - SIGINT
.
Повний монстр команди:
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
Можна, звичайно, подивитися на екран . Це дозволяє розділити консоль на стільки окремих консолей, скільки ви хочете. Таким чином, ви можете контролювати всі команди окремо, але в той же час.