Экран: Возобновление нового экрана? Делание легче выбора?

Ударом по умолчанию (и я предполагаю zsh) будет в emacs-режиме. Вы могли попробовать что-то вроде этого:

Esc + b поместит курсор, поддерживают одно слово. Ctrl + k удалит до конца строки.

Большинство современных оболочек (как удар) реализует усовершенствованные особенности редактирования командной строки. Те команды любой близко к emacs, редактирующему (Ctrl +A в течение начала строки, Ctrl + E для конца строки...).

Если Вы - familar с подобным редакторам vi, Вы могли бы попытаться позволить vi-режим.

set -o vi

Это дает Вашей оболочке подобные vi режимы (командный режим / режим вставки), и Вы добираетесь, доступ к стандартным командам (d для удаляют, r для замены...),

В Vi Mode вот то, как Вы сделали бы то, что Вы описали:

Esc (command mode); d; b.
5
18.10.2011, 01:47
2 ответа

Вот сценарий, который должен работать на Вас.

#!/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

Я не различал сессии, которые в настоящее время присоединяются или отсоединяются, таким образом, Вам, вероятно, придется сделать это самим, если это имеет значение для Вас.

3
27.01.2020, 20:40
  • 1
    Лучше получить каталог сессии от screen -ls; например, на Ubuntu 11.10, dir /var/run/screen/S-$(whoami). –  Arcege 18.10.2011, 03:35
  • 2
    , отредактированный для включения предложения от @Arcege. –  Tim Kennedy 18.10.2011, 05:24
  • 3
    я на самом деле использую это сам теперь.:) Спасибо за то, что задали этот вопрос. –  Tim Kennedy 19.10.2011, 20:31
  • 4
    Можно объединиться grep + awk как это: awk '/Socket/ {print $NF}'. –  janmoesen 02.11.2011, 00:26
  • 5
    select мог бы пригодиться для меню, даже при том, что его выходной формат не настолько хорош. –  janmoesen 02.11.2011, 00:27

Первое, что нужно сделать состоит в том, чтобы определить местоположение каталога сессии. Можно получить это от вывода 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

"Новейшая" сессия является той, последний раз созданной; я не полагаю, что существует любая информация, хранившая о том, когда сессия была отсоединена.

Вы могли, конечно, сделать обертку, чтобы выбрать из списка и запустить ту сессию, но Вы не можете получить информацию от существующей сессии (вывод переходит к сессии, не к выводу программы вызова.

2
27.01.2020, 20:40

Теги

Похожие вопросы