Como a tela do bash pode ser configurada em segundo plano e trazida para a frente mais tarde?

Como a tela do bash pode ser configurada em segundo plano e trazida para a frente mais tarde?

Esta é uma explicação mais profunda para a questão.

Minha meta é:

  1. Inicie um shell bash configurado com um conjunto de variáveis ​​de ambiente, mas em execução em segundo plano.

  2. 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 screencomandos devem ser todos organizados na janela bash, de preferência lado a lado.

  3. Acesse o shell bash mais tarde, com todos os screencomandos exibidos.

  4. Feche o shell bash e o associado screenquando 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 >screenRcTestcom 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 runinvó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 basharquivo pronto.

Nissointernobash, clique simplesmente:

./screenSplitTest

Isso dividirá sua janela e deixará você pronto novamente, em sua sessão bash.

captura de tela do resultado

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 dda próxima vez que você executar xtermcom os mesmos argumentos e geometria, o script screenSplitTest será iniciado automaticamente.

Editar 2

E agora, você pode até instalar isso trapno seu .bashrc, usando MyVariablepara garantir que o bash seja filho detelaRcTesttela (depois de passar screenSplitTestpara um arquivo oculto em $HOME/.screenSplitTestfor 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.

informação relacionada