Passa rapidamente da una sessione virtuale all'altra (schermo?)


19

Mi piacerebbe avere poche sessioni virtuali in una finestra di stucco e passare rapidamente da una all'altra. Qual è il modo migliore per farlo? screen? So che posso staccarmi ctrl+ade quindi ricollegarmi a una sessione diversa, ma sembra scrivere molto.

Risposte:


22

Solo per espandere ciò che Ansgar ha detto nel caso in cui non si abbia molta familiarità con lo schermo gnu, Avere più "finestre" in una singola sessione dello schermo probabilmente realizzerà ciò di cui hai bisogno.

ctrl+ a, ccreerà una nuova "finestra" nella sessione dello schermo attiva. Puoi alternare tra più finestre (come indicato da Ansgar) con ctrl+ a, nper la finestra successiva e ctrl+ a, pper la finestra precedente.

ctrl+ a, "ti darà un elenco di tutte le finestre aperte.

L'utilizzo di queste semplici scorciatoie ti consentirà di passare da un terminale all'altro in modo rapido e semplice, raggiungendo il tuo obiettivo senza utilizzare sessioni multiple sullo schermo.

Se aggiungi la seguente riga a ~ / .screenrc mostrerà sempre le tue finestre aperte e quale è selezionata, quindi non è necessario tenere traccia di quale finestra stai ricordando.

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

Questa è la linea hardstatus che mi piace usare, ma è completamente personalizzabile (vedi la pagina man o cerca su google "gnu screen hardstatus").

Ci sono molte altre cose che puoi fare con esso (nominando le diverse finestre aperte per esempio), quindi vale la pena leggere alcuni tutorial.

Ecco un paio che ho trovato con una ricerca veloce:

http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml

http://www.ibm.com/developerworks/aix/library/au-gnu_screen/

E ovviamente il più utile di tutti:

# From your terminal:
$ man screen

Spero possa aiutare.

Matteo


2

Sì, screenmolto probabilmente è la strada da percorrere. Ctrl+ a, nti porterà alla finestra successiva, Ctrl+ a, pa quella precedente. Ctrl+ a, 0.. 9ti permetterà di passare a una schermata particolare.


Puoi impostare combinazioni di tasti molto più veloci, come F11 per prev, F12 per la finestra successiva. E cambia il personaggio di escape dello schermo da ^aa qualcos'altro, quindi non è ridicolmente fastidioso usare la modifica delle linee in stile emacs in bash, nient'altro. Io uso ^t.
Peter Cordes,

1

Quello che dicono gli altri è corretto. Voglio solo menzionare che tmuxè un'alternativa a screen. Hanno comandi molto simili.

Entrambi screene tmuxoffrono più finestre per una sessione in esecuzione, e questo è probabilmente quello che vuoi. tmuxoffre inoltre il salto tra più sessioni (ognuna con le proprie finestre). Ne avresti bisogno molto raramente.

Ecco alcuni link alla documentazione di schermo e un corso intensivo su tmux .


1

Dopo così tanto tempo ho creato uno script per aggirare questa caratteristica completamente mancante. Prima di tutto ha bisogno di un fifo:

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

Questa pipe denominata è utile per la comunicazione tra la sessione bloccata e la sessione "Principale senza schermo".

File sc (in $ 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

Un esempio di "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

Il risultato è: quando si desidera avviare il tipo di schermata:

sc Monitor

o un altro sessionrc che ti piace inventare, io uso il Session Work per varie cose

Es: ~ / .screen / Workrc

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

Ora siamo nel Session Monitor, quando digitiamo:

sc Work

il monitor di sessione si stacca da solo e scrive "Lavora" sul tubo indicato. Di conseguenza, il primo script sc va avanti e allega la sessione "Lavoro".
Lo sc richiamato dalla sessione Monitor si chiude.

Quando scolleghiamo tutte le sessioni ci troviamo in un ciclo infinito, quindi dobbiamo fare Ctrl-c per uscire.


1

Puoi farlo con un semplice script shell come

    for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done 
  1. Supponiamo che tu abbia poche schermate aperte. Supponiamo anche che tu li abbia classificati come lavoro e dati.

    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. Applicando screen -ls, dovresti avere i tuoi schermi come questo

    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. Ora consente di isolare gli schermi separati usando grep.

    screen -ls | grep Detached
    

Dovresti ottenere qualcosa del genere

        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. Ora consente di selezionare quelli desiderati (ad es. Dati), utilizzando nuovamente grep.

    screen -ls | grep Detached | grep data
    

Questo isolerà solo le schermate dei dati. Puoi modificare la parola chiave grep con espressioni regolari per cercare per personalizzare la tua ricerca.

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. Fortunatamente il risultato è ben strutturato e delimitato da tabulazioni. Ora consente di dividere le colonne in campi e scegliere il secondo campo usando cut.

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

Sarà necessario premere ctrl+vquindi la scheda per inserire un tabdopo il parametro delimitatore -d. I risultati dovrebbero essere così.

81592.data13
81586.data12
81574.data10
81580.data11
  1. Ora impacchettalo in un comando usando le ...virgolette e passa in rassegna i risultati in questo modo. Controllare sempre i comandi formulati prima di eseguirli effettivamente. ero solitoecho screen -r

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        echo screen -r $s; \
    done
    
  2. Se tutto va bene, allora provalo senza echo.

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        screen -r $s; \
    done
    
  3. Ecco. Ogni schermata da cui ti disconnetti ti porta alla successiva.

Buona proiezione !!


Questa è davvero una bella risposta e aumenta la qualità generale di questo sito.
123456789123456789123456789

1

Ho scritto uno script del nodo per consentire all'utente di selezionare la sessione dello schermo a cui collegarsi da un elenco, usando i tasti freccia. L'ho fatto un pacchetto npm. Puoi verificarlo qui: screen-command . O semplicemente npm i -g screen-commandper provarlo, supponendo che hai già installato node.js. Dopo aver installato il pacchetto, utilizzare il comando scper richiamare l'elenco di schermate.

Spero che questo renda più facile il passaggio allo schermo esatto che desideri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.