Для одновременного запуска команд вы можете использовать &
разделитель команд.
~$ 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] /'
Вы могли бы, конечно, взглянуть на экран . Это позволяет вам разделить вашу консоль на столько разных консолей, сколько вы хотите. Таким образом, вы можете контролировать все команды по отдельности, но в то же время.