Как можно перевести bash screen в фоновый режим и вывести его на передний план позже?

Как можно перевести bash screen в фоновый режим и вывести его на передний план позже?

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

Моя цель:

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

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

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

  4. 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.

Связанный контент