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

2

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

Meu objetivo é:

  1. Inicie um shell bash configurado com um conjunto de variáveis de ambiente, mas executando em segundo plano.

  2. Lance cerca de cinco comandos screen no bash shell, cada um executando seus próprios comandos, mas usando o comando variáveis de ambiente definidas no shell bash. Os comandos screen devem todos ser organizados na janela bash, preferencialmente lado a lado.

  3. Chame o shell bash mais tarde, com todos os comandos screen mostrando.

  4. Feche o shell bash e o screen associado quando terminar.

por vfclists 29.12.2012 / 02:26

2 respostas

3

Bem, depois de algum tempo na sua pergunta, há algumas observações:

linha 2: os comandos devem ser organizados na janela do bash, preferencialmente lado a lado não é possível, como quando separados, não há janelas .

Então, quando você anexar novamente, verá sempre apenas uma pseudo-tty .

Mas, para fazer de maneira aproximada o que você pediu, tente o seguinte:

Primeiro, crie um arquivo RC como digitação: 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

De que prepare um wrapper run 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 criar uma apresentação tiled , prepare outro script de shell como cat >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 de chmod +x screenSplitTest .

Por fim, execute o comando de exibição como:

xterm -fn 9x15 -geom 160x60 -exec screen -DrS screenTest 

Isso abrirá uma nova janela com apenas bash pronto.

Neste inner bash, clique simplesmente:

./screenSplitTest

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

Digiteagora:

echo$MyVariableTest

Então,vocêverácomoavariávelEnvironmentétransmitidaparaofilhobash.

Editaradição:

Depoisdefazertudo,vocêpodeclicarnoseguinteemseuinnerbash:

trap'[$(tputlines)==60]&&[$(tputcols)==160]&&./screenSplitTest'WINCH

Entãovocêpodedesconectardigitando:Ctrl-Addoquedapróximavezquevocêexecutarxtermcomosmesmosargumentosegeometria,oscriptscreenSplitTestseráiniciadoautomaticamente.

Editar2

Eagora,vocêpodeatéinstalaressetrapnoseu.bashrc,usandoMyVariableparagarantirqueobashsejaumfilhodatelascreenRcTest(depoisdemoverscreenSplitTestparaumocultoarquivoem$HOME/.screenSplitTestparaconstance):

["$TERM.$MyVariable" == "screen.Test" ] && \
    trap '[ $(tput lines) == 60 ] && [ $(tput cols) == 160 ] && $HOME/.screenSplitTest' WINCH
    
por 29.12.2012 / 15:59
1

De acordo com o meu conhecimento, você não pode unir instâncias de tela, mas pode unir instâncias do tmux. O que você poderia fazer é criar um arquivo rc para as configurações do ambiente compartilhado e, em seguida, carregá-lo para cada um dos seus 5 shells bash usando bash --rcfile <your file here> .

Os shells bash seriam iniciados com o lançamento do tmux e, quando dentro, executariam 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.

    
por 29.12.2012 / 15:50