Швидке перемикання між віртуальними сеансами (екран?)


19

Я хотів би провести кілька віртуальних сеансів в одному вікні шпаклівки та швидко змінитись між ними. Який найкращий спосіб зробити це? screen? Я знаю, що можу відключитися ctrl+adта повторно приєднатись до іншого сеансу, але це, здається, дуже багато вводити текст.

Відповіді:


22

Просто для розширення того, що сказав Ансгар у випадку, якщо ви не дуже знайомі з екраном 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

Сподіваюся, що це допомагає.

Метью


2

Так, screenце, швидше за все, шлях. Ctrl+ a, nпереведе вас до наступного вікна Ctrl+ a, pдо попереднього. Ctrl+ a, 0.. 9дозволить перейти на певний екран.


Ви можете налаштувати набагато швидші вкладки клавіш, наприклад, F11 для попереднього, F12 для наступного вікна. І змінити символ виходу з екрана ^aна щось інше, так що не смішно дратувати використання редагування ліній в стилі emacs в баші, нічого іншого. Я використовую ^t.
Пітер Кордес

1

Те, що кажуть інші, є правильним. Я просто хочу зазначити tmux, що це альтернатива screen. У них дуже схожі команди.

Обидва screenі tmuxпропонують кілька вікон для запущеного сеансу, і це, мабуть, те, що ви хочете. tmuxдодатково пропонує перестрибування між декількома сеансами (у кожного є свої вікна). Це вам знадобиться дуже рідко.

Ось декілька посилань на документацію екрана та курс збоїв щодо tmux .


1

Через стільки часу я зробив Сценарій, щоб обійти цю повністю відсутність функції. Насамперед йому потрібна фіфо:

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.


1

Це можна зробити за допомогою простого сценарію оболонки

    for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done 
  1. Припустимо, у вас відкрито кілька екранів. Давайте також припустимо, що ви їх класифікували як роботу та дані.

    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;
    ...
    
  2. Застосовуючи 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.
    
  3. Тепер давайте ізолювати відокремлені екрани за допомогою 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)
  1. Тепер вибираємо ті, які ви хочете (наприклад, дані), знову використовуючи grep.

    screen -ls | grep Detached | grep data
    

Це дозволить ізолювати лише екрани даних. Ви можете змінити ключове слово grep за допомогою регулярних виразів для пошуку, щоб налаштувати ваш пошук.

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. На щастя, результат добре структурований і розміщений на вкладках. Тепер розділимо стовпці на поля та виберемо 2-е поле за допомогою cut.

    screen -ls | grep Detached | grep data | cut -d'       ' -f2
    

Вам потрібно буде натиснути клавішу ctrl+vпотім, щоб вставити tabпараметр після роздільника -d. Результати повинні бути такими.

81592.data13
81586.data12
81574.data10
81580.data11
  1. Тепер упакуйте це в команду, використовуючи ...лапки та перевірте подібні результати. Завжди перевіряйте сформульовані команди 1-й, перш ніж її реально виконати. я використавecho screen -r

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        echo screen -r $s; \
    done
    
  2. Якщо все піде добре, то спробуйте без нього echo.

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        screen -r $s; \
    done
    
  3. Вуаля. Кожен екран, від якого ви від'єднаєтесь, переходить до наступного.

Щасливий скринінг !!


Це дійсно приємна відповідь, і це підвищує загальну якість цього веб-сайту.
123456789123456789123456789

1

Я написав сценарій вузла, щоб дозволити користувачеві вибирати сеанс екрана, до якого слід долучитись зі списку, за допомогою клавіш зі стрілками. Я зробив це пакетом npm. Ви можете перевірити це тут: screen-command . Або просто npm i -g screen-commandспробувати його, якщо ви вже встановили node.js. Після встановлення пакета використовуйте команду, scщоб викликати список екранів.

Я сподіваюся, що це полегшить перехід на потрібний екран.

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