Як bash екран може бути встановлений у фоновому режимі і доставлений на фронт пізніше?


2

Це більш глибоке пояснення питання.

Моя мета:

  1. Запустіть оболонку bash, настроєну з набором змінних оточення, але запущених у фоновому режимі.

  2. Запуск близько п'яти екрані Команди в оболонці bash, кожна з яких виконує свої власні команди, але використовує змінні середовища, встановлені в оболонці bash. The screen Команди повинні бути розташовані у вікні bash, переважно плиткою.

  3. Викличте bash оболонку пізніше, з усіма screen відображення команд.

  4. Закрийте оболонку bash і асоційовану screen після завершення.


@KingSkippus Існує досить багато хороших відповідей на баш і екран, тому я дам це коли-небудь.
vfclists

Відповіді:


3

Ну, через деякий час на ваше запитання є деякі спостереження:

рядок 2: Команди повинні бути розташовані у вікні bash, переважно плиткою неможливо, як при від'єднанні, вікон немає .

Тому, коли ви повторно прикріплюєтеся, ви завжди будете бачити тільки одну псевдо-tty .

Але для того, щоб зробити приблизну інформацію про те, що потрібно, спробуйте наступне:

Спочатку створіть 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

Чим підготувати a 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 

Це відкриє нове вікно лише за допомогою a bash готовий.

У цьому внутрішній bash, просто вдарив:

./screenSplitTest

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

result screenshoot

Введіть зараз:

echo $MyVariable
Test

Таким чином, ви побачите, як змінна середовища передається до дочірнього bash.

Додавання редагування:

Після того, як ви зробите все, ви можете натиснути наступне у вашому внутрішній bash:

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

Отже, можна від'єднатися, набравши: Ctrl-A d , ніж наступного разу, коли ви працюєте xterm з тими ж аргументами і геометрією, скрипт screenSplitTest буде ініційований автоматично.

Редагувати 2

А тепер ви навіть можете встановити це trap у вашому .bashrc, використовуючи MyVariable для забезпечення того, що Баш є дитиною Росії screenRcTest екран (після переміщення screenSplitTest до прихованого файлу в $HOME/.screenSplitTest для констанції):

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

@FHauri Все, що я можу сказати, це Wow! Я бачу, що ви тільки що приєдналися до суперкористувача. Де ви були в минулому, коли ми були вам потрібні? :)
vfclists

1
Спасибі! Я додав трохи .bashrc лінія, щоб зробити їх більше автоматичний .
F. Hauri

1

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

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


tmux була інша утиліта я мав на увазі, але у мене немає досвіду з ним, але я знаю, це буде корисно один день.
vfclists
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.