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.
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+a, c 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+a, n 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
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 .
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.
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
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;
...
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.
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)
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)
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
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
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
Voila. Chaque écran que vous détachez de vous emmène à la suivante.
Bonne filtrage !!