Быстрое переключение между виртуальными сеансами (экран?)

Быстрое переключение между виртуальными сеансами (экран?)

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

решение1

Просто чтобы расширить то, что сказал Ансгар, на случай, если вы не очень хорошо знакомы с GNU Screen, наличие нескольких «окон» в одном сеансе экрана, скорее всего, достигнет того, что вам нужно.

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, которую я предпочитаю использовать, но ее можно полностью настраивать (см. страницу руководства или выполните поиск в 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позволит вам переключиться на определенный экран.

решение3

После стольких лет я сделал скрипт, чтобы обойти эту полностью отсутствующую функцию. Прежде всего, ему нужен fifo:

mkdir ~/.screen
mkfifo ~/.screen/pipe

Этот именованный канал полезен для связи между отсоединенным сеансом и сеансом «Main-without-screen».

Файлподкожно(в $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, который вам нравится изобретать, я использую Session Work для разных вещей

Пример: ~/.screen/Workrc

layout new Work  
screen -t "bash" bash --login  

Теперь мы находимся в мониторе сеанса и вводим:

sc Work

сеанс Monitor отсоединяется и записывает "Work" в namedpipe. Соответственно, первый скрипт sc переходит вперед и присоединяет сеанс "Work".
Вызванный из сеанса Monitor sc закрывается.

Когда мы отсоединяем все сеансы, мы попадаем в бесконечный цикл, поэтому для выхода нам приходится нажимать Ctrl-c.

решение4

Вы можете сделать это с помощью простого скрипта оболочки, например:

    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. К счастью, результат хорошо структурирован и разделен табуляцией. Теперь давайте разделим столбцы на поля и выберем второе поле с помощью cut.

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

Вам нужно будет нажать ctrl+vклавишу Tab, чтобы вставить a 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
    
  2. Если все пойдет хорошо, то попробуйте без echo.

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

Приятного просмотра!!

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