Відповіді:
Просто для розширення того, що сказав Ансгар у випадку, якщо ви не дуже знайомі з екраном gnu, маючи кілька вікон на одному сеансі екрану, швидше за все, виконаєте те, що вам потрібно.
ctrl+ a, cстворить нове "вікно" у вашому активному сеансі екрану. Ви можете перемикатися між кількома вікнами (як зазначено в Ansgar) за допомогою ctrl+ a, nдля наступного вікна та ctrl+ a, pдля попереднього вікна.
ctrl+ a, "надасть вам список усіх відкритих вікон.
Використання цих простих ярликів дозволить вам швидко та легко перемикатися між різними терміналами, досягаючи своєї мети без використання сеансів на декількох екранах.
Якщо ви додасте наступний рядок до ~ / .screenrc, він завжди відображатиме ваші відкриті вікна та яке вибране, тож вам не потрібно слідкувати за тим, яке вікно ви знаходитесь, запам'ятовуючи.
hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'
Це рядок hardstatus, яку я люблю використовувати, але вона повністю настроюється (див. Сторінку man або шукайте в Google для "gnu screen hardstatus").
Є багато інших речей, які ви можете зробити з цим (наприклад, називаючи різні відкриті вікна), тому варто прочитати кілька навчальних посібників.
Ось пара, яку я знайшов швидким пошуком:
http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml
http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
І звичайно найкорисніше з усіх:
# From your terminal:
$ man screen
Сподіваюся, що це допомагає.
Метью
Так, screen
це, швидше за все, шлях. Ctrl+ a, nпереведе вас до наступного вікна Ctrl+ a, pдо попереднього. Ctrl+ a, 0.. 9дозволить перейти на певний екран.
Те, що кажуть інші, є правильним. Я просто хочу зазначити tmux
, що це альтернатива screen
. У них дуже схожі команди.
Обидва screen
і tmux
пропонують кілька вікон для запущеного сеансу, і це, мабуть, те, що ви хочете.
tmux
додатково пропонує перестрибування між декількома сеансами (у кожного є свої вікна). Це вам знадобиться дуже рідко.
Ось декілька посилань на документацію екрана та курс збоїв щодо tmux .
Через стільки часу я зробив Сценарій, щоб обійти цю повністю відсутність функції. Насамперед йому потрібна фіфо:
mkdir ~/.screen
mkfifo ~/.screen/pipe
Ця названа труба корисна для зв'язку між від'єднаним сеансом та сеансом "Основний без екрана".
Файл sc (у $ PATH):
#!/bin/bash
CONFIGFILE=~/.screen/"$1""rc"
if [ ! -r $CONFIGFILE ] ; then
echo "Configurazione per $1 Assente" >&2
exit 1
fi
exec 3<> ~/.screen/pipe
if [ "$STY" != "" ] ; then
screen -d "$STY"
echo "$1" >&3
else
screen -r "$1" 2>/dev/null || screen -S "$1" -c $CONFIGFILE
while true ; do
read line <&3
screen -r "$line" 2>/dev/null || screen -S "$line" -c ~/.screen/"$line""rc"
done
fi
Прикладом "CONFIGFILE" є: ~ / .screen / Monitorrc
layout new Monitor
screen -t "bash" bash --login
split -v
focus next
split
focus bottom
screen -t "cv" sh -c "watch /usr/bin/cv -w"
split
focus bottom
screen -t "sys.log" sh -c "tail -F /var/log/sys.log"
focus up
focus up
resize 25
screen -t "top" sh -c "top"
focus left
Результат: коли потрібно запустити тип екрана:
sc Monitor
або інший sessionrc, який ви хочете вигадувати, я використовую сесійну роботу для різних матеріалів
Наприклад: ~ / .screen / Workrc
layout new Work
screen -t "bash" bash --login
Тепер ми перебуваємо в Моніторі сеансів, коли ми вводимо:
sc Work
Монітор сеансу відокремлюється і пише "Робота" на названий трубу. Отже, перший сценарій sc йде вперед і додає сеанс "Робота".
Sc викликається з сеансу Монітор закрити.
Коли ми від'єднуємо всі сеанси, ми знаходимося в нескінченному циклі, тому для виходу нам потрібно зробити Ctrl-c.
Це можна зробити за допомогою простого сценарію оболонки
for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done
Припустимо, у вас відкрито кілька екранів. Давайте також припустимо, що ви їх класифікували як роботу та дані.
for i in {10..13}; do screen -S `printf data%02d $i`; done;
for i in {0..5}; do screen -S `printf work%02d $i`; done;
...
Застосовуючи screen -ls
, у вас повинні бути такі екрани
There are screens on:
81592.data13 (Detached)
81539.work04 (Detached)
81527.work02 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81533.work03 (Detached)
81488.work00 (Detached)
81607.ttys014.Mo (Attached)
81545.work05 (Detached)
81580.data11 (Detached)
81521.work01 (Detached)
81515.work00 (Detached)
12 Sockets in /var/folders/qs/cvlbhpr54fnb96vtx01bs9k00000gn/T/.screen.
Тепер давайте ізолювати відокремлені екрани за допомогою grep
.
screen -ls | grep Detached
Ви повинні отримати щось подібне
81592.data13 (Detached)
81539.work04 (Detached)
81527.work02 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81533.work03 (Detached)
81488.work00 (Detached)
81545.work05 (Detached)
81580.data11 (Detached)
81521.work01 (Detached)
81515.work00 (Detached)
Тепер вибираємо ті, які ви хочете (наприклад, дані), знову використовуючи grep
.
screen -ls | grep Detached | grep data
Це дозволить ізолювати лише екрани даних. Ви можете змінити ключове слово grep за допомогою регулярних виразів для пошуку, щоб налаштувати ваш пошук.
81592.data13 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81580.data11 (Detached)
На щастя, результат добре структурований і розміщений на вкладках. Тепер розділимо стовпці на поля та виберемо 2-е поле за допомогою cut
.
screen -ls | grep Detached | grep data | cut -d' ' -f2
Вам потрібно буде натиснути клавішу ctrl+v
потім, щоб вставити tab
параметр після роздільника -d
. Результати повинні бути такими.
81592.data13
81586.data12
81574.data10
81580.data11
Тепер упакуйте це в команду, використовуючи ...
лапки та перевірте подібні результати. Завжди перевіряйте сформульовані команди 1-й, перш ніж її реально виконати. я використавecho screen -r
for s in `screen -ls | \
grep Detached | grep data | \
cut -d' ' -f2`; do \
echo screen -r $s; \
done
Якщо все піде добре, то спробуйте без нього echo
.
for s in `screen -ls | \
grep Detached | grep data | \
cut -d' ' -f2`; do \
screen -r $s; \
done
Вуаля. Кожен екран, від якого ви від'єднаєтесь, переходить до наступного.
Щасливий скринінг !!
Я написав сценарій вузла, щоб дозволити користувачеві вибирати сеанс екрана, до якого слід долучитись зі списку, за допомогою клавіш зі стрілками. Я зробив це пакетом npm. Ви можете перевірити це тут: screen-command . Або просто npm i -g screen-command
спробувати його, якщо ви вже встановили node.js. Після встановлення пакета використовуйте команду, sc
щоб викликати список екранів.
Я сподіваюся, що це полегшить перехід на потрібний екран.
^a
на щось інше, так що не смішно дратувати використання редагування ліній в стилі emacs в баші, нічого іншого. Я використовую^t
.