Como executar um segundo comando na mesma sessão de tela


12

Estou iniciando o primeiro comando na tela assim:

screen -d -m -S testen -t lalala watch df -h

o que me dá uma sessão de tela sendo executada em segundo plano e posso reconectar mais tarde.

Como posso executar um segundo comando em uma nova janela na mesma sessão de tela?

Respostas:


11

Inicie uma sessão de tela nomeada ( -S) com uma janela nomeada ( -t) adaptando-se ao tamanho do terminal ( -A) no modo desanexado ( -d -m):

screen -S mySessionName -t myWinName0 -A -d -m

Inicie outra janela nomeada ( -t) na mesma sessão de tela ( -S):

screen -S mySessionName -X screen -t myWinName2

Coloque alguns comandos ( -X stuff $'cmds') na primeira janela nomeada ( -p) na sessão ( -S):

screen -S mySessionName -p myWinName0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'

Coloque alguns comandos ( -X stuff $'cmds') na segunda janela nomeada ( -p) na sessão ( -S):

screen -S mySessionName -p myWinName1 -X stuff $'echo myWinName1\necho cmd1\necho cmd2\n'

Liste as sessões da tela e reconecte para ver o que aconteceu:

screen -ls
screen -r mySessionName

Nota: O avanço de linha ( \n) simula a pressão Enter. Você também pode usar ponto e vírgula para separar comandos.


Você não precisa fazer os bits de "coisas". screen -S sessionName -t windowName1 -Adm <command> && screen -S sessionName -X screen -t windowName2 -Adm <command2>
6306 Lotus

4

Tela interna:

  • Ctrl-A, cpara abrir uma nova janela do shell
  • Ctrl-A, :screen newcmdpara corrernewcmd

Lado de fora:

screen -X testen "screen newcmd"

oi grawity , eu sei disso, mas gostaria de fazê-lo a partir de um script init. Basicamente, eu quero iniciar 2 comandos em janelas separadas na mesma sessão de tela. ver você

1
@bob: Veja o exemplo # 3, "Tela externa", nesta resposta.
User1686 5/05

oi grawity, screen -S testen -X 'screen echo "hi"'não funciona.

Também não consegui fazer o método -X funcionar. Fwiw, minha tela -v diz "Versão da tela 4.00.03 (FAU) 23-Out-06" #
Lauri Lehtinen

4

Tentei acima da abordagem, mas o segundo comando não foi executado na segunda janela. Ajustei levemente o exemplo usando o número da janela, em vez do nome da janela:

  1. criar sessão

    screen -S mySessionName -t 0 -A -d -m
    
  2. criar segunda janela

    screen -S mySessionName -X screen -t 1
    
  3. comando de envio para a primeira janela

    screen -S mySessionName -p 0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
  4. comando de envio para segunda janela

    screen -S mySessionName -p 1 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
  5. Agora verifique se o comando foi executado na primeira janela

    screen -R mySessionName -p 0
    
  6. Agora verifique se o comando foi executado na segunda janela

    screen -R mySessionName -p 1
    

Testado com a tela 4.00.03 (CENTOS 6.3 x64).


1

Você pode configurar um .screenrc alternativo através do -cargumento Neste novo screenrc, você pode configurar vários comandos para iniciar quando a sessão de tela for inicializada.

No final deste arquivo .screenrc alternativo, coloque os seguintes comandos:

screen 1 cmd1 args
screen 2 cmd2 args

Você não precisa configurar um arquivo de configuração alternativo se planeja executar apenas um tipo de sessão de tela e os comandos padrão sempre estão corretos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.