web-dev-qa-db-fra.com

Changer rapidement entre des sessions virtuelles (écran?)

J'aimerais avoir peu de session virtuelle dans une fenêtre de mastic et changer rapidement. Quelle est la meilleure façon de faire ça? screen? Je sais que je peux me détacher avec ctrl+ad, puis razetach à une autre session, mais cela semble être beaucoup de dactylographe.

19
zzz

Juste pour développer ce qu'Ansgar a dit au cas où vous n'êtes pas très familier avec l'écran GNU, plusieurs "fenêtres" dans une session d'une seule session accompliront probablement ce dont vous avez besoin.

ctrl+ac créera une nouvelle "fenêtre" dans votre session d'écran actif. Vous pouvez basculer entre plusieurs fenêtres (comme Ansgar indiquée) avec ctrl+an pour la prochaine fenêtre, et ctrl+a,p pour la fenêtre précédente.

ctrl+a," vous donnera une liste de toutes vos fenêtres ouvertes.

L'utilisation de ces raccourcis faciles vous permettra de basculer entre différents terminaux très rapidement et facilement, accomplissez votre objectif sans utiliser plusieurs sessions d'écran.

Si vous ajoutez la ligne suivante à ~/.screenrc, il affichera toujours votre fenêtre ouverte et laquelle est sélectionnée, vous n'avez donc pas besoin de garder une trace de quelle fenêtre vous vous souvenez.

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

C'est la ligne HardStatus que j'aime utiliser, mais c'est complètement personnalisable (voir la page de l'homme ou la recherche de Google pour "GNU Screen HardStatus").

Il y a une tonne d'autres choses que vous pouvez en faire (nommer les différentes fenêtres ouvertes par exemple), il vaut donc la peine de lire certains tutoriels.

Voici un couple que j'ai trouvé avec une recherche rapide:

http://news.softpedia.com/news/gnu-screen-Torial-44274.shtml

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

Et bien sûr, le plus utile de tous:

# From your terminal:
$ man screen

J'espère que cela pourra aider.

Matthieu

22
Matthew

Ce que les autres disent est correct. Je veux juste mentionner tmux est une alternative à screen. Ils ont des commandes très similaires.

screen et tmux propose plusieurs fenêtres pour une session de course, ce qui est probablement ce que vous voulez. tmux offre en outre un saut de saut entre plusieurs sessions (chacune ayant ses propres fenêtres). Vous auriez besoin de cela très rarement.

Voici quelques liens vers la documentation de écran et un cours d'accident sur TMUX .

1
tkruse

Après tant de temps, j'ai fait un script pour contourner cette fonctionnalité absolue. Tout d'abord, il a besoin d'une FIFO:

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

Ce tuyau nommé est utile pour la communication entre la session détachée et la session "principale sans écran".

Fichier SC (en $ Chemin):

#!/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 exemple d'un "configfile" est: ~/.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

Le résultat est le suivant: lorsque vous souhaitez lancer un type d'écran:

sc Monitor

ou une autre session que vous aimez inventer, j'utilise le travail de session pour diverses choses

Ex: ~/.Screen/WorkRC

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

Nous sommes maintenant dans le moniteur de session, lorsque nous tapons:

sc Work

le moniteur de session se détache et écrit "travail" au nomméPipe. Par conséquent, le premier script SC avance et attache la session "travail".
[.____] Le SC invoque à la fermeture du moniteur de session.

Lorsque nous détachons toutes les sessions, nous sommes dans une boucle infinie afin que nous devons faire CTRL-C pour sortir.

1
Thomas8

Vous pouvez le faire avec un script de shell simple comme

    for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done 
  1. Supposons que vous avez peu d'écrans ouverts. Supposons également que vous les avez classés comme un travail et des données.

    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. Appliquer screen -ls, vous devriez avoir vos écrans comme celui-ci

    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. Permet maintenant d'isoler les écrans détachés en utilisant grep.

    screen -ls | grep Detached
    

Vous devriez obtenir quelque chose comme ça

        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. Permet maintenant de sélectionner ceux que vous voulez (par exemple), à ​​nouveau à l'aide de grep.

    screen -ls | grep Detached | grep data
    

Cela isolera uniquement les écrans de données. Vous pouvez modifier le mot clé GREP avec des expressions régulières pour rechercher personnaliser votre recherche.

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. Heureusement, le résultat est bien structuré et que l'onglet délimitée. Permet maintenant de diviser les colonnes dans des champs et de choisir le 2e champ à l'aide de cut.

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

Vous devrez appuyer sur ctrl+v puis onglet pour insérer un tab après le paramètre délimiteur -d. Les résultats doivent être comme ça.

81592.data13
81586.data12
81574.data10
81580.data11
  1. Maintenant, emballez cela dans une commande en utilisant le ... citations et boucle sur les résultats comme celui-ci. Vérifiez toujours les commandes formulées 1er avant de l'exécuter réellement. J'ai utilisé echo screen -r

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        echo screen -r $s; \
    done
    
  2. Si tout va bien, essayez-le sans echo.

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        screen -r $s; \
    done
    
  3. Voila. Chaque écran que vous détachez de vous emmène à la suivante.

Bonne filtrage !!

1
Mo Hossny