
Esta é uma explicação mais profunda para a questão.
Minha meta é:
Inicie um shell bash configurado com um conjunto de variáveis de ambiente, mas em execução em segundo plano.
Lançar cerca de cincotelacomandos no shell bash, cada um executando seus próprios comandos, mas usando as variáveis de ambiente definidas no shell bash. Os
screen
comandos devem ser todos organizados na janela bash, de preferência lado a lado.Acesse o shell bash mais tarde, com todos os
screen
comandos exibidos.Feche o shell bash e o associado
screen
quando terminar.
Responder1
Bem, depois de algum tempo na sua pergunta, há algumas observações:
linha 2:todos os comandos devem ser organizados na janela bash, de preferência lado a ladonão é possível, como quando separado,não há janelas.
Então, quando você reconectar, sempre verá apenas umpseudo-tty.
Mas para fazer aproximadamente o que foi solicitado, tente o seguinte:
Primeiro crie um arquivo RC digitando: cat >screenRcTest
com o seguinte:
setenv MyVariable Test
screen -t Top top
screen -t VMStat vmstat -n 1
screen -t OpenPorts watch -n 2 'netstat -tan | grep LISTEN'
screen -t IF-Configs watch -n2 'ip -s link show | grep -v "^ *[RT]X: bytes"'
screen -t "Bourne Again Shell" /bin/bash -i
Do que preparar um run
invólucro como:
screen -ls | grep -q screenTest || screen -dmS screenTest -c ./screenRcTest
isso executará uma nova sessão de tela em segundo plano, se ainda não existir.
Para construirlado a ladoapresentação, prepare outro script de shell comocat >screenSplitTest
#!/bin/bash
while read line ;do
screen -X $line
done <<eof
split
split
resize 20
split -v
resize 82
select 0
focus
select 1
focus
split -v
select 2
focus
select 3
focus
select 4
eof
e não se esqueça chmod +x screenSplitTest
.
Finalmente execute ocomando de exibiçãocomo:
xterm -fn 9x15 -geom 160x60 -exec screen -DrS screenTest
Isso abrirá uma nova janela com apenas um bash
arquivo pronto.
Nissointernobash, clique simplesmente:
./screenSplitTest
Isso dividirá sua janela e deixará você pronto novamente, em sua sessão bash.
Digite agora:
echo $MyVariable
Test
Então você verá como a variável de ambiente foi passada para o bash filho.
Editar adição:
Depois de fazer tudo, você poderá acertar o seguinte em seuinternofesta:
trap '[ $(tput lines) == 60 ] && [ $(tput cols) == 160 ] && ./screenSplitTest' WINCH
Então você pode se desconectar digitando: Ctrl-A d
da próxima vez que você executar xterm
com os mesmos argumentos e geometria, o script screenSplitTest será iniciado automaticamente.
Editar 2
E agora, você pode até instalar isso trap
no seu .bashrc
, usando MyVariable
para garantir que o bash seja filho detelaRcTesttela (depois de passar screenSplitTest
para um arquivo oculto em $HOME/.screenSplitTest
for constância):
[ "$TERM.$MyVariable" == "screen.Test" ] && \
trap '[ $(tput lines) == 60 ] && [ $(tput cols) == 160 ] && $HOME/.screenSplitTest' WINCH
Responder2
Que eu saiba, você não pode agrupar instâncias de tela, mas pode agrupar instâncias do tmux. O que você pode fazer é criar um arquivo rc para as configurações do ambiente compartilhado e, em seguida, carregá-lo em cada um dos seus 5 shells bash usando bash --rcfile <your file here>
.
Os shells bash seriam iniciados iniciando o tmux e, quando dentro, executar algum comando para criar uma nova divisão (por exemplo Ctrl+b % para uma divisão vertical, usando configurações padrão) para cada instância do bash.