2

Это более глубокое объяснение вопроса.

Моя цель:

  1. Запустите оболочку bash, настроенную с набором переменных среды, но работающую в фоновом режиме.

  2. Запустите около пяти экранных команд в оболочке bash, каждая из которых выполняет свои собственные команды, но с использованием переменных среды, установленных в оболочке bash. Все screen команды должны быть расположены в окне bash, желательно мозаичным.

  3. Позже вызовите оболочку bash, и все screen команды будут показаны.

  4. Закройте командную оболочку и связанный screen когда закончите.

2 ответа2

3

Что ж, через некоторое время по вашему вопросу появятся некоторые замечания:

Строка 2: все команды должны быть расположены в окне bash, желательно плиточный не возможен, так как при отсоединении нет окон.

Поэтому при повторном присоединении вы всегда будете видеть только одну псевдо-tty.

Но чтобы сделать примерно то, что просили, попробуйте следующее:

Сначала создайте RCfile, набрав: cat >screenRcTest со следующим:

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

Чем подготовить обертку run как:

screen -ls | grep -q screenTest || screen -dmS screenTest -c ./screenRcTest

это запустит новый сеанс экрана в фоновом режиме, если он еще не существует.

Для построения мозаичной презентации подготовьте другой сценарий оболочки как 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

и не забудьте chmod +x screenSplitTest .

Наконец, выполните команду отображения как:

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

Это откроет новое окно только с готовым bash .

В этом внутреннем ударе просто нажмите:

./screenSplitTest

Это разделит ваше окно и позволит вам снова подготовиться в вашей сессии bash.

скриншот результата

Введите сейчас:

echo $MyVariable
Test

Итак, вы увидите, как переменная среды передается дочернему bash.

Редактировать дополнение:

После этого все, вы могли бы ударить его в вашем внутреннем Баш:

trap '[ $(tput lines) == 60 ] && [ $(tput cols) == 160 ] && ./screenSplitTest' WINCH

Таким образом, вы можете отключиться, набрав: Ctrl-A d чем в следующий раз, когда вы запустите xterm теми же аргументами и геометрией, сценарий screenSplitTest будет запущен автоматически.

Редактировать 2

И теперь вы можете даже установить эту trap в вашем .bashrc , используя MyVariable чтобы гарантировать, что bash является дочерним элементом экрана screenRcTest (после перемещения screenSplitTest в скрытый файл в $HOME/.screenSplitTest для констанции ):

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

Насколько мне известно, вы не можете мозаичные экземпляры экрана, но вы можете мозаичные экземпляры tmux. Что вы можете сделать, это создать rc-файл для настроек общей среды, а затем загрузить его в каждый из ваших 5 оболочек bash, используя bash --rcfile <your file here> .

Оболочки bash запускаются при запуске tmux и, когда внутри, выполняют какую-то команду, чтобы создать новое разбиение (например, Ctrl+b% для вертикального разбиения, используя стандартные настройки) для каждого экземпляра bash.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .