가상 세션(화면?) 간을 빠르게 전환합니다.

가상 세션(화면?) 간을 빠르게 전환합니다.

하나의 퍼티 창에 가상 세션이 거의 없고 빠르게 전환하고 싶습니다. 그렇게 하는 가장 좋은 방법은 무엇입니까? screen? 분리한 다음 다른 세션에 다시 연결할 수 있다는 것을 알고 있지만 ctrl+ad입력이 많이 필요한 것 같습니다.

답변1

Gnu 화면에 익숙하지 않은 경우 Ansgar가 말한 내용을 확장하면 단일 화면 세션에 여러 개의 "창"이 있으면 필요한 작업을 수행할 수 있습니다.

ctrl+ a, c활성 화면 세션에 새 "창"이 생성됩니다. 다음 창의 경우 ctrl+ 를 a사용 하고 이전 창의 경우 + 를 사용하여 여러 창(Ansgar가 지정한 대로) 사이를 전환할 수 있습니다 .nctrlap

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이동합니다 . + , ..를 사용하면 특정 화면으로 전환할 수 있습니다.CtrlapCtrla09

답변3

오랜 시간을 보낸 후 완전히 누락된 이 기능을 해결하기 위한 스크립트를 만들었습니다. 우선 fifo가 필요합니다.

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  

이제 Session Monitor에 다음과 같이 입력합니다.

sc Work

세션 모니터는 자체적으로 분리되고 명명된 파이프에 "Work"를 씁니다. 결과적으로 첫 번째 sc 스크립트가 진행되어 "Work" 세션을 연결합니다.
세션 모니터에서 호출된 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 키를 눌러야 합니다 . 결과는 다음과 같아야합니다.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. 짜잔. 분리한 각 화면은 다음 화면으로 이동합니다.

즐거운 상영회!!

관련 정보