화면: 최근 화면을 복원하시겠습니까? 선택을 더 쉽게 하시겠습니까?

화면: 최근 화면을 복원하시겠습니까? 선택을 더 쉽게 하시겠습니까?

화면에 관해 몇 가지 질문이 있습니다. 를 입력하면 screen -r다음과 같은 메시지가 나타납니다.

There are several suitable screens on:
    25154.tracks    (Detached)
    29278.mywork    (Detached)
    29138.mywork    (Detached)
    30915.mywork    (Detached)
    20065.mywork    (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

확실하지는 않지만 한동안 사용하지 않았고 실수로 하나에서 하나를 분리했기 때문에 이 스크린의 대부분은 오래된 것이라고 생각합니다. 이에 대한 내 질문은 다음과 같습니다.

  • 복원할 수 있는 방법이 있나요최근의분할 화면?
  • 이전 화면 세션을 "삭제"하는 방법은 무엇입니까?
  • 각 세션의 날짜와 화면 수를 표시할 수 있나요?
  • screen -r쉽게 선택할 수 있도록 별칭을 나열된 화면과 일시적으로 연결할 수 있는 방법이 있습니까 ? 예를 들어, screen -r나열된 화면이 다음과 같다면 좋을 것입니다.
There are several suitable screens on:
[1] 25154.tracks  (Detached)
[2] 29278.mywork  (Detached)
[3] 29138.mywork  (Detached)
[4] 30915.mywork  (Detached)
[5] 20065.mywork  (Detached)
Choose  one to resume:

pid그러면 복원하려는 전체 화면을 입력할 필요 없이 1, 2, 3, 4 또는 5만 입력할 수 있습니다 . 이 문제를 해결할 방법이 있나요?

답변1

다음은 귀하에게 적합한 스크립트입니다.

#!/bin/bash

function chooser {

    echo
    echo "I found the following screen sessions: "
    echo

    pcount=0

    # 
    # find the session dir
    #
    sessdir=$( screen -ls | egrep 'Socket' | awk '{print $NF}' | sed -e 's/\.$//' )

    #
    # enumerate existing sessions, and add them to the plist() array.
    #
    for screen in $( find $sessdir -type p ); do
            pcount=$((pcount+1))
            pname=$( basename $screen )
            pdate=$( ls -latr $screen | awk '{print "( "$6" "$7" "$8" )"}')
            plist[$pcount]=${pname}
            echo "  [$pcount]       $pname   $pdate"
    done

    echo
    echo -n "Please select a session to reconnect to: "
    read choice

    # 
    # if the selected choice doesn't exist, recycle the chooser.
    #
    if [ -z ${plist[$choice]} ]; then
            echo
            echo "Your choice [$choice] is invalid.  Please try again."
            echo
            sleep 1
            chooser
    else
            screen -r -d ${plist[$choice]}
    fi

}

#
# the chooser function does all the work
#
chooser

현재 연결된 세션과 분리된 세션을 구분하지 않았으므로 이것이 중요한 경우 직접 수행해야 할 수도 있습니다.

답변2

가장 먼저 해야 할 일은 세션 디렉터리의 위치를 ​​결정하는 것입니다. 의 출력에서 ​​이를 얻을 수 있습니다 screen -ls.

# session directory
sessdir=`screen -ls | sed -ne 's/.*Sockets* in \(.*\)\.$/\1/p'`
# display age of sessions:
ls -l $sessdir
# newest session
newest=`ls -1t $sessdir | head -1`
# Kill all sessions but newest
ls -1t $sessdir| sed 1d | while read sess; do screen -m -S $sess -X quit; done

"최신" 세션은 가장 최근에 생성된 세션입니다. 세션이 분리된 시기에 대한 정보는 없습니다.

목록에서 선택하고 해당 세션을 시작하는 래퍼를 만들 수는 있지만 기존 세션에서 정보를 검색할 수는 없습니다. 출력은 호출 프로그램의 출력이 아닌 세션으로 이동합니다.

관련 정보