Exatamente o que o título diz:
Meu script de shell deveria
- Execute o comando A, espere até terminar
- execute "tela"
- execute o comando B1 na tela inicial
- abra uma nova janela (geralmente via Cmd-ac)
- execute o comando B2 em uma nova janela
- abrir nova janela
- execute o comando B3 em uma nova janela
É isso, não há necessidade de esperar até que alguns (ou todos) sejam feitos, embora isso daria pontos extras. Como eu poderia fazer isso?
Responder1
Inicie um plano de fundo screen
com o nome da sessão "mysession":
screen -d -m -S mysession
Execute 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
Abra 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 sair, a janela não fechará, pois screen
terá iniciado um shell em cada um (que você pode usar se necessário).
- OU -se você deseja apenas um único comando por janela ou deseja limpar mais facilmente após a conclusão dos processos, não execute o shell padrão em cada janela, apenas o(s) 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
irá "encerrar" a janela (possivelmente deixando o conteúdo da janela intacto, veja zombie
abaixo) quando o processo terminar, ou para desligá-los:
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
mas enviará um SIGHUP para cada um)
Se você deseja screen
fechar automaticamente as janelas e sair quando todos os processos forem concluídos, adicione isto depois de criar a sessão (embora se você não tiver zombie
definido no seu .screenrc
, este é provavelmente o padrão de qualquer maneira):
screen -S mysession -X zombie
Isso desativa as teclas "zumbi" para fechar e ressuscitar, as janelas desaparecem quando o comando em cada janela termina e screen
fecha quando a última janela termina. (Talvez seja necessário usar defzombie
em vez de zombie
, mas apenas o último funciona para mim, apesar da documentação em contrário.)