Risposte:
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
Sì, screen
molto 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.
Quello che dicono gli altri è corretto. Voglio solo menzionare che tmux
è un'alternativa a screen
. Hanno comandi molto simili.
Entrambi screen
e tmux
offrono più finestre per una sessione in esecuzione, e questo è probabilmente quello che vuoi.
tmux
offre 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 .
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.
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
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;
...
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.
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)
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)
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+v
quindi la scheda per inserire un tab
dopo il parametro delimitatore -d
. I risultati dovrebbero essere così.
81592.data13
81586.data12
81574.data10
81580.data11
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
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
Ecco. Ogni schermata da cui ti disconnetti ti porta alla successiva.
Buona proiezione !!
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-command
per provarlo, supponendo che hai già installato node.js. Dopo aver installato il pacchetto, utilizzare il comando sc
per richiamare l'elenco di schermate.
Spero che questo renda più facile il passaggio allo schermo esatto che desideri.
^a
a qualcos'altro, quindi non è ridicolmente fastidioso usare la modifica delle linee in stile emacs in bash, nient'altro. Io uso^t
.