屏幕:恢复最近的屏幕?让选择更容易?

Ame*_*ina 5 gnu-screen

我有几个关于 screen 的问题:当我输入时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.
Run Code Online (Sandbox Code Playgroud)

我不确定,但我相信这些屏幕中的大部分都是旧的,因为我有一段时间没有使用过屏幕了,我只是不小心从一个屏幕上脱落了。有了这个,我的问题是:

  • 有没有办法恢复最近分离的屏幕?
  • 如何“删除”较旧的屏幕会话?
  • 是否可以在每个会话中显示日期和屏幕数量?
  • 有没有办法暂时将别名与列出的屏幕相关联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:
Run Code Online (Sandbox Code Playgroud)

然后我可以只输入 1、2、3、4 或 5,而不必输入pid我想要恢复的整个屏幕。有什么可以解决问题的吗?

Tim*_*edy 3

这是一个应该适合您的脚本。

#!/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
Run Code Online (Sandbox Code Playgroud)

我没有区分当前附加或分离的会话,因此如果这对您很重要,您可能必须自己执行此操作。

  • 最好从“screen -ls”获取会话目录;例如,在 Ubuntu 11.10 上,目录为“/var/run/screen/S-$(whoami)”。 (2认同)