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 $COMMAND
em segundo plano.
Você pode ver sessões ativas screen -ls
e 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 .screenrc
arquivo, 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 screen
acima cria uma sessão de tela. -t
define 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 screen
linha iniciam uma sessão e lançam vim
dentro dela. O terceiro apenas inicia uma sessão e envia você quando solicitado. chdir
altera o diretório de trabalho para todas as sessões subsequentes.
Se você quiser ter vários .screenrc
arquivos, 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 .screenrc
uma 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.