Alternando rapidamente entre as sessões virtuais (tela?)

16

Eu gostaria de ter poucas sessões virtuais em uma janela de massa e mudar rapidamente entre elas. Qual é a melhor maneira de fazer isso? %código%? Eu sei que posso desanexar com screen e, em seguida, reconectar a uma sessão diferente, mas parece muita digitação.

    
por zzz 18.09.2012 / 21:11

5 respostas

17

Apenas para expandir o que o Ansgar disse no caso de você não estar muito familiarizado com a tela do gnu, ter várias "janelas" em uma única sessão provavelmente conseguirá o que você precisa.

ctrl + a , c criará uma nova "janela" na sua sessão de tela ativa. Você pode alternar entre múltiplas janelas (como Ansgar indicou) com ctrl + a , n para a próxima janela, e ctrl + a , p para a janela anterior.

ctrl + a , " fornece uma lista de todas as janelas abertas.

Usando esses atalhos fáceis, você poderá alternar entre terminais diferentes com muita rapidez e facilidade, cumprindo sua meta sem usar várias sessões de tela.

Se você adicionar a seguinte linha a ~ / .screenrc, ela sempre exibirá suas janelas abertas e qual delas é selecionada, portanto, você não precisa saber de qual janela está se lembrando.

hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'

Esta é a linha de hardstatus que eu gosto de usar, mas é completamente personalizável (veja man page ou pesquise no google por "gnu screen hardstatus").

Há muitas outras coisas que você pode fazer com ele (nomeando as diferentes janelas abertas, por exemplo), então vale a pena ler alguns tutoriais.

Aqui está um casal que encontrei com uma pesquisa rápida:

link

link

E, claro, o mais útil de todos:

# From your terminal:
$ man screen

Espero que ajude.

Mateus

    
por 03.10.2012 / 01:03
1

Sim, screen é o melhor caminho a percorrer. Ctrl + a , n irá levá-lo para a próxima janela, Ctrl + a , p para o anterior. Ctrl + a , 0 .. 9 permite-lhe mudar para um determinado ecrã.

    
por 18.09.2012 / 21:18
1

O que os outros dizem está correto. Eu só quero mencionar tmux é uma alternativa para screen . Eles têm comandos muito semelhantes.

Tanto screen como tmux oferecem várias janelas para uma sessão em execução, e é provavelmente isso que você deseja. O tmux também oferece saltos entre várias sessões (cada uma com suas próprias janelas). Você precisaria disso muito raramente.

Aqui estão alguns links para a documentação da tela e um curso intensivo sobre tmux .

    
por 10.10.2013 / 10:22
1

Depois de tanto tempo, criei um Script para contornar esse recurso completamente ausente. Primeiro de tudo, precisa de um fifo:

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

Este pipe nomeado é útil para a comunicação entre a sessão desanexada e a sessão "Main-without-screen".

Arquivo sc (em $ 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

Um exemplo de um "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

O resultado é: quando você deseja iniciar o tipo de tela:

sc Monitor

ou outra sessão que você gosta de inventar, eu uso o trabalho da sessão para várias coisas

Ex: ~ / .screen / Workrc

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

Agora estamos no Monitor de sessão, quando digitamos:

sc Work

o monitor da sessão se destaca e escreve "Work" no namedpipe. Conseqüentemente, o primeiro script sc avança e anexa a sessão "Trabalho".
O sc invocado da sessão Monitor próximo.

Quando desanexamos todas as sessões, estamos em um loop infinito, então temos que fazer Ctrl-c para sair.

    
por 20.01.2015 / 16:17
1

Você pode fazer isso com um script de shell simples como

    for s in 'screen -ls | grep Detached | grep <regex to your screen names>'; do screen -r $s; done 
  1. Vamos supor que você tenha poucas telas abertas. Vamos também supor que você os tenha categorizado como trabalho e dados.

    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. Aplicando screen -ls , você deve ter suas telas assim

    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. Agora vamos isolar as telas desanexadas usando grep .

    screen -ls | grep Detached
    

Você deve ter algo assim

        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. Agora, selecione os que você deseja (por exemplo, dados), novamente usando grep .

    screen -ls | grep Detached | grep data
    

Isso isolará apenas as telas de dados. Você pode alterar a palavra-chave grep com expressões regulares para pesquisar para personalizar sua pesquisa.

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. Felizmente, o resultado é bem estruturado e delimitado por tabulações. Agora vamos dividir as colunas em campos e escolher o segundo campo usando cut .

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

Você precisará pressionar a guia ctrl+v para inserir um tab após o parâmetro delimitador -d . Os resultados devem ser assim.

81592.data13
81586.data12
81574.data10
81580.data11
  1. Agora coloque isso em um comando usando as ... quotes e faça um loop sobre os resultados como este. Sempre verifique os comandos formulados primeiro antes de executá-lo. Eu usei echo screen -r

    for s in 'screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2'; do \
        echo screen -r $s; \
    done
    
  2. Se tudo correr bem, tente sem echo .

    for s in 'screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2'; do \
        screen -r $s; \
    done
    
  3. Voila. Cada tela que você separa leva você para a próxima.

Feliz exibição !!

    
por 29.11.2017 / 23:34