Executar programaticamente tarefas em segundo plano em uma tela dividida?

Executar programaticamente tarefas em segundo plano em uma tela dividida?

Estou tentando descobrir como criar um comando chamado runbgque aceitará subcomandos para serem executados em segundo plano e criará uma tela dividida para cada subcomando. Quando um subcomando é concluído com êxito, a tela dividida é fechada; se um subcomando falhar, a tela permanece aberta com o erro até que o usuário feche a tela com o sinal de encerramento. Assim que todas as telas forem fechadas, o comando será concluído e a execução continuará. Por exemplo

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

Eu descobri que posso fazer:

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

O que realiza o lado paralelo das coisas, porém cada comando envia tudo para o mesmo terminal, o que é muito barulhento. Daí o desejo de uma configuração de tela dividida.

Pesquisando aqui, descobriTela GNUque parece lidar com o lado da tela, mas parece que requer um arquivo .screenrc - o que, embora seja possível fazer programaticamente, é um pouco chato, pois imagino que isso significaria que eu precisaria escrever um arquivo tmp aleatório em algum lugar .

eu encontreiesta respostaque envolve o uso da tela sem, .sreenrcno entanto, não consigo descobrir como fazer a tela dividida nela.

Resumindo:

  • Existe algo que já faz a funcionalidade que pretendo runbg?
  • Se não, o GNU Screen é o que eu quero para isso? Preciso usar um .screenrcarquivo ou existe uma maneira de realizar as telas divididas sem ele?

Responder1

Você pode fazer isso com o tmux agrupando janelas divididas e chaves de envio como esta:

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 \;

informação relacionada