
Esta es una explicación más profunda para la pregunta.
Mi meta es:
Inicie un shell bash configurado con un conjunto de variables de entorno, pero ejecutándose en segundo plano.
Lanzar alrededor de cincopantallacomandos en el shell bash, cada uno ejecuta sus propios comandos, pero usando las variables de entorno configuradas en el shell bash. Todos los
screen
comandos deben estar organizados en la ventana de bash, preferiblemente en mosaico.Llame al shell bash más tarde, donde
screen
se mostrarán todos los comandos.Cierre el shell bash y el asociado
screen
cuando haya terminado.
Respuesta1
Bueno, después de un tiempo con tu pregunta, hay algunas observaciones:
línea 2:Todos los comandos deben estar organizados en la ventana de bash, preferiblemente en mosaico.no es posible, como cuando se desapega,no hay ventanas.
Entonces, cuando vuelvas a conectar, siempre verás solo unopseudo-tty.
Pero para hacer aproximadamente lo solicitado, intente lo siguiente:
Primero cree un archivo RC escribiendo: cat >screenRcTest
con lo siguiente:
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
Luego prepare un run
envoltorio como:
screen -ls | grep -q screenTest || screen -dmS screenTest -c ./screenRcTest
esto ejecutará una nueva sesión de pantalla en segundo plano si aún no existe.
Para construirembaldosadopresentación, prepare otro 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
y no lo olvides chmod +x screenSplitTest
.
Finalmente ejecuta elcomando de visualizacióncomo:
xterm -fn 9x15 -geom 160x60 -exec screen -DrS screenTest
Esto abrirá una nueva ventana con solo un bash
listo.
En estointernobash, presione simplemente:
./screenSplitTest
Esto dividirá su ventana y lo dejará listo nuevamente en su sesión de bash.
Escribe ahora:
echo $MyVariable
Test
Entonces verá cómo la variable de entorno se pasa al bash secundario.
Editar adición:
Después de hacer todo, podrías presionar lo siguiente en tuinternointento:
trap '[ $(tput lines) == 60 ] && [ $(tput cols) == 160 ] && ./screenSplitTest' WINCH
Por lo tanto, puede desconectarse escribiendo: Ctrl-A d
la próxima vez que ejecute xterm
con los mismos argumentos y geometría, el script screenSplitTest se iniciará automáticamente.
Editar 2
Y ahora, incluso podrías instalar esto trap
en tu .bashrc
, usándolo MyVariable
para asegurar que bash sea hijo depantallaRcTestpantalla (después de pasar screenSplitTest
a un archivo oculto, $HOME/.screenSplitTest
por ejemplo):
[ "$TERM.$MyVariable" == "screen.Test" ] && \
trap '[ $(tput lines) == 60 ] && [ $(tput cols) == 160 ] && $HOME/.screenSplitTest' WINCH
Respuesta2
Que yo sepa, no se pueden colocar en mosaico instancias de pantalla, pero sí instancias de tmux. Lo que podría hacer es crear un archivo rc para la configuración del entorno compartido y luego cargarlo en cada uno de sus 5 shells bash usando bash --rcfile <your file here>
.
Los shells de bash se iniciarían iniciando tmux y, cuando estén dentro, ejecutarían algún comando para crear una nueva división (por ejemplo, Ctrl+b % para una división vertical, usando la configuración estándar) para cada instancia de bash.