
Это более глубокое объяснение вопроса.
Моя цель:
Запустите оболочку bash, настроенную с набором переменных среды, но работающую в фоновом режиме.
Запуск около пятиэкранкоманды в оболочке bash, каждая из которых выполняет свои собственные команды, но использует переменные окружения, заданные в оболочке bash.
screen
Все команды должны быть расположены в окне bash, желательно плиткой.Позже вызовите оболочку bash, в которой
screen
будут показаны все команды.screen
По завершении закройте оболочку bash и связанные с ней приложения .
решение1
Ну, после некоторого времени по Вашему вопросу есть некоторые наблюдения:
строка 2:Все команды должны быть организованы в окне bash, желательно плиткой.невозможно, так как при отсоединении,нет окон.
Поэтому при повторном подключении вы всегда будете видеть только одинпсевдо-телефон.
Но чтобы сделать приблизительно то, что предлагается, попробуйте следующее:
Сначала создайте RC-файл, 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
решение2
Насколько мне известно, вы не можете размещать экземпляры экрана, но вы можете размещать экземпляры tmux. Что вы можете сделать, так это создать rc-файл для настроек общей среды, а затем загрузить его в каждую из ваших 5 оболочек bash с помощью bash --rcfile <your file here>
.
Оболочки bash будут запущены путем запуска tmux, а находясь внутри, выполнят некоторую команду для создания нового разделения (например, Ctrl+b % для вертикального разделения с использованием стандартных настроек) для каждого экземпляра bash.