Como posso iniciar várias sessões de tela automaticamente?

Como posso iniciar várias sessões de tela automaticamente?

Estou tentando construir um comando que inicie screen, crie quatro sessões com nomes diferentes e execute quatro comandos diferentes.

Eu sei como fazer isso manualmente:

1. screen
2. ./command1 args
3. CTRL-A :sessionname Session 1
4. CTRL-A C
5. (GOTO 2)

Posso fazer isso com um script bash ou algo assim? Como eu faria isso?

Responder1

screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"irá gerar uma tela rodando $COMMANDem segundo plano.

Você pode ver sessões ativas screen -lse reconectar com arquivos screen -r "$SESSION_NAME".

Sessões mortas podem ser eliminadas com screen -wipe.

Responder2

Para iniciar múltiplas sessões automaticamente, configure um .screenrcarquivo, um arquivo de configuração para tela. Nele você pode criar sessões, iniciar programas, alterar o diretório de trabalho etc. Eu o uso para inicializar minha sessão de tela.

Exemplo simples para um arquivo .screenrc:

# don't display the copyright page
startup_message off

# increase scrollback buffer size
defscrollback 10000

# create windows
screen -t TODO vim TODO.txt
chdir src
screen -t coding vim main.c
screen -t run 

Cada comando screenacima cria uma sessão de tela. -tdefine o título da sessão; o resto da linha é o comando a ser executado e seus parâmetros.

Assim, a primeira e a segunda screenlinha iniciam uma sessão e lançam vimdentro dela. O terceiro apenas inicia uma sessão e envia você quando solicitado. chdiraltera o diretório de trabalho para todas as sessões subsequentes.

Se você quiser ter vários .screenrcarquivos, basta nomeá-los da maneira que desejar e selecionar um com extensão screen -c myscreenrc.

Responder3

Você pode usar as opções d, m, S juntas:

screen -Sdm s1
screen -Sdm s2
screen -Sdm s3

S: Para criar uma tela

d: desconectar de uma tela

m: Para impor a criação da tela, independentemente de a tela ser chamada de outra tela ou não.

Responder4

Tenho muitos casos em que preciso abrir um conjunto de hosts para investigação ou suporte. Como só preciso dessas janelas adicionais ocasionalmente, decidi usar um script de shell em vez de .screenrcuma abordagem.

por exemplo em ~/bin/prod_support:

#!/bin/bash

if [[ ! -z "$STY" ]]; then
        screen -t "hosta" ssh hosta
        screen -t "hostb" ssh hostb
else
        echo "start up screen first"
fi

Se correr de umsem telashell, recebo um lembrete... se for executado de dentro da tela, ele adicionará janelas intituladas para cada script executado.

informação relacionada