Script de shell: tela de execução, abra várias telas e execute um comando em cada

1

Praticamente o que o título diz:

Meu script de shell deve

  • Execute o comando A, espere até terminar
  • executar "tela"
  • execute o comando B1 na tela inicial
  • abre uma nova janela (normalmente via Cmd-a-c)
  • execute o comando B2 em uma nova janela
  • abrir nova janela
  • execute o comando B3 em uma nova janela

É isso, não é preciso esperar até que alguns (ou todos) sejam feitos, embora isso daria pontos de bônus. Como eu pude fazer isso?

    
por FooBar 08.08.2018 / 14:26

1 resposta

1

Inicie um plano de fundo screen nomeie a sessão "mysession":

screen -d -m -S mysession

Executar top na primeira janela

screen -S mysession -X exec top

Inicie outra janela, nomeie-a como "win1" e execute " vmstat 10 " nela

screen -S mysession -X screen -t win1
screen -S mysession -p win1 -X exec vmstat 10

Inicie outra janela, nomeie-a como "win2" e execute " iostat 30 " nela

screen -S mysession -X screen -t win2 
screen -S mysession -p win2 -X exec iostat 30

Para se conectar e ver a sessão:

screen -x -S mysession

Se algum dos programas for encerrado, a janela não será fechada, pois screen terá iniciado um shell em cada um (que você pode usar se necessário).

- OU - se você quer apenas um único comando por janela, ou quer limpar mais facilmente após a conclusão dos processos, não execute o shell padrão em cada janela, apenas o comando (s):

screen -d -m -S mysession top
screen -S mysession -p 0 -X title win0    # optional!
screen -S mysession -X screen -t win1 vmstat 10
screen -S mysession -X screen -t win2 iostat 30

screen "terminará" a janela (possivelmente deixando o conteúdo da janela intacto, veja zombie abaixo) quando o processo terminar, ou para encerrá-lo:

screen -S mysession -X quit   # nuke whole the session

ou

screen -S mysession -p win2 -X kill
screen -S mysession -p win1 -X kill
screen -S mysession -p 0 -X kill

(isso pode ou não matar qualquer processo em execução, screen enviará um SIGHUP a cada um deles)

Se você quiser que screen feche automaticamente as janelas e saia quando todos os processos estiverem concluídos, adicione isso depois de criar a sessão (se você não tiver zombie definido em .screenrc , isso é provavelmente o padrão de qualquer maneira):

screen -S mysession -X zombie

Isso impede que o "zumbi" feche e ressuscite as chaves; as janelas, em seguida, desaparecem quando o comando em cada janela termina, screen se fechará quando a última janela terminar. (Você pode precisar usar defzombie em vez de zombie , mas somente este último funciona para mim, apesar da documentação em contrário.)

    
por 08.08.2018 / 21:47