Программно запускать фоновые задачи на разделенном экране?

Программно запускать фоновые задачи на разделенном экране?

Я пытаюсь понять, как создать команду с именем runbg, которая будет принимать подкоманды для выполнения в фоновом режиме и создавать разделенный экран для каждой подкоманды. Когда подкоманда завершается успешно, разделенный экран закрывается; если подкоманда завершается неудачей, то экран остается открытым с ошибкой, пока пользователь не закроет экран с помощью сигнала terminate. После того, как все экраны будут закрыты, команда будет завершена и выполнение продолжится. Например:

runbg "ping -t 5 google.com" "ping -t 10 microsoft.com"
echo "done"

Я обнаружил, что могу делать:

ping -t 5 google.com &
ping -t 10 microsoft.com &
wait

Что реализует параллельную сторону вещей, однако каждая команда выводит все на один и тот же терминал, что очень шумно. Отсюда и желание настройки разделенного экрана.

В результате поиска здесь я обнаружилЭкран GNUкоторый, похоже, обрабатывает экранную часть, но, похоже, для этого требуется файл .screenrc — что, хотя и возможно сделать программно, немного раздражает, поскольку, как я предполагаю, это означало бы, что мне пришлось бы где-то записывать случайный файл tmp.

я нашелэтот ответчто подразумевает использование экрана без, .sreenrcоднако я не могу понять, как в нем реализовать функцию разделения экрана.

Итак, вкратце:

  • Есть ли что-то, что уже выполняет нужную мне функциональность runbg?
  • Если нет, то нужен ли мне GNU Screen для этого? Нужно ли использовать файл .screenrcили есть способ сделать разделенные экраны без него?

решение1

Это можно сделать с помощью tmux, объединив клавиши split-window и send-keys следующим образом:

tmux new session \; split-window -v \; send-keys 'ping -t 5 google.com' C-m \; split-window -h \; send-keys 'ping -t 10 microsoft.com' C-m \;

Связанный контент