Comment ouvrir des fenêtres d'onglets dans Gnu-screen et exécuter des commandes dans chacune d'elles

30

quand démarre la session nommée avec un nom comme celui-ci screen -S name1

Je veux ouvrir des fenêtres d'onglets dans cette session d'écran comme lorsque vous ouvrez des onglets dans gnome-terminal comme celui-ci

gnome-terminal --tab -e "some commands"

Alors comment le faites vous ?

Ahmed Zain El Dein
la source
LES DEUX Je veux savoir comment ouvrir les onglets sımılar à gnome termınal et ı je veux exécuter une commande ın ıt après ı ouvrir l'onglet ın exécuter le temps
Ahmed Zain El Dein
Donc, la technique que j'ai décrite ci-dessous montre les onglets que vous recherchez alors? Vous avez juste besoin d'un moyen d'exécuter une commande en eux?
slm
mais en fait, je suis débutant et je ne comprends pas exactement ce que vous voulez que je fasse exactement. Je pensais qu'il y avait une syntaxe pour ouvrir les onglets sur l'écran et dans la fenêtre, mais il semble que j'ajouterais des lignes à certains fichiers
Ahmed Zain El Dein
ok je comprends que vous voulez que je copie ceci et le passé dans ce fichier sur ma maison mais ce que je demande c'est screen -t name donne un titre à l'écran comme je le sais et aussi je veux ouvrir ces onglets dans une session nommée par exemple, screen -S name1 --tab -e "some commands"j'espère que vous obtiendrez ce que je demande?
Ahmed Zain El Dein
mmmm ce sont des onglets prédéfinis avec un certain nombre ce n'est pas ce que je demande monsieur :) je ne sais pas combien d'onglets j'ai besoin pendant l'exécution ce que je veux est quelque chose de similaire à la commande du terminal gnome gnome-terminal --tab -e "commands " --tab -e " commands cela ouvrira une fenêtre de terminal avec deux onglets par exemple je veux dire :) merci
Ahmed Zain El Dein

Réponses:

73

1. Onglets à l'écran

Vous cherchez ceci à ajouter à votre fichier .screenrc:

screen -t tab1
screen -t tab2

Voici un joli .screenrc de base pour vous aider à démarrer avec une barre d'état, etc. REMARQUE: Il se trouve généralement dans votre répertoire personnel /home/<username>/.screenrc.

screen -t validate #rtorrent
screen -t compile #irssi
screen -t bash3
screen -t bash4
screen -t bash5
altscreen on
term screen-256color
bind ',' prev
bind '.' next
#
#change the hardstatus settings to give an window list at the bottom of the
#screen, with the time and date and with the current window highlighted
hardstatus alwayslastline
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

capture d'écran

ss de session écran

2. Onglets dans l'écran (avec des commandes exécutées à l'intérieur)

L'exemple .screenrcci-dessous va créer 2 onglets et exécuter 3 commandes d'écho dans chacun.

screen -t tab1                                                                                     
select 0                                                                                           
stuff "echo 'tab1 cmd1'; echo 'tab1 cmd2'; echo 'tab1 cmd3'^M"                                     
screen -t tab2                                                                                     
select 1                                                                                           
stuff "echo 'tab2 cmd1'; echo 'tab2 cmd2'; echo 'tab2 cmd3'^M"                                     

altscreen on                                                                                       
term screen-256color                                                                               
bind ',' prev                                                                                      
bind '.' next                                                                                      
#                                                                                                  
#change the hardstatus settings to give an window list at the bottom of the                        
#screen, with the time and date and with the current window highlighted                            
hardstatus alwayslastline                                                                          
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'              
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

Cette technique utilise des écrans selectet des stuffcommandes pour sélectionner initialement l'un des onglets, puis «y bourrer» une chaîne.

capture d'écran

écran avec onglets et commandes

3. Créer # 2 sans utiliser de .screenrcfichier

Si vous recherchez le scénario où vous pouvez:

  1. créer une session écran
  2. chargez-le avec des onglets
  3. chaque onglet exécutant ses propres commandes
  4. pas besoin de .screenrcfichier

Alors c'est celui qu'il vous faut! Soyez prêt cependant. Celui-ci peut devenir un peu délicat avec les lignes de commande.

Pour commencer, créons une session d'écran:

$ screen -AdmS myshell -t tab0 bash

Les commutateurs -AdmSeffectuent les opérations suivantes:

(Voir la page de manuel de l' écran pour plus de détails)

-UNE

    Adapt the sizes of all windows to the size of the  current terminal. 
    By default, screen tries to restore its old window sizes when
    attaching to resizable terminals

-d -m

    Start screen in "detached" mode. This creates a new session but
    doesn't attach to it. This is useful for system startup scripts.

-S nom de session

    When creating a new session, this option can be used to specify a
    meaningful name for the session. This name identifies the session for
    "screen -list" and "screen -r" actions. It substitutes the default
    [tty.host] suffix.

Commençons maintenant à le charger avec des onglets + leurs commandes:

$ screen -S myshell -X screen -t tab1 vim
$ screen -S myshell -X screen -t tab2 ping www.google.com
$ screen -S myshell -X screen -t tab3 bash

Ces 3 commandes vont créer 3 onglets supplémentaires et exécuter vim, ping google et lancer un shell bash. Si nous listons les sessions d'écran, nous verrons ce qui suit:

$ screen -ls
There is a screen on:
        26642.myshell   (Detached)
1 Socket in /var/run/screen/S-root.

Si nous nous connectons à la session écran, myshell , et listons les onglets qu'elle contient, nous verrons ce qui suit:

$ screen -r myshell

Appuyez sur cette combinaison de touches: Ctrl+ Asuivi de Shift+"

Num Name                                                                   Flags

  0 tab0                                                                       $
  1 tab1                                                                       $
  2 tab2                                                                       $
  3 tab3                                                                       $

Passer à tab2 :

64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=443 ttl=55 time=41.4 ms
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=444 ttl=55 time=33.0 ms
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=445 ttl=55 time=30.1 ms

capture d'écran

SS d'écran initié à partir de cli

Les commandes ci-dessus sont le moyen de base pour accomplir ce que l'OP recherchait. Bien sûr, cela peut être condensé et affiné en utilisant des alias Bash ou même des scripts shell, c'est simplement pour démontrer la capacité et montrer la voie!

Les références

slm
la source
2
Si je ne manque pas de lire le Q, il veut exécuter une commande au début de la session. Typiquementscreen "cd /foo/bar/; summon_cthulhu;" <<-- in that screen session
Runium
Vous pensez qu'il veut dire, ouvrir un écran avec des onglets et exécuter une commande à l'intérieur de l'un d'eux?
slm
Oui. Exécutez une commande shell au démarrage dans l' écran, généralement comme lorsque vous vous connectez après le démarrage et obtenez Last login on ... Welcome to XXX, N new mails..... C'est du moins ainsi que j'ai lu l'en- tête du Q.
Runium
Lisez ses commentaires sur le Q, il veut les deux.
slm
bravo j'aimerais voter aussi mais ma petite réputation m'a empêché :)
Ahmed Zain El Dein