Comment exécuter une deuxième commande dans la même session d'écran

12

Je lance la première commande à l'écran comme ceci:

screen -d -m -S testen -t lalala watch df -h

ce qui me donne une session d'écran fonctionnant en arrière-plan et je peux me reconnecter plus tard.

Comment puis-je exécuter une deuxième commande dans une nouvelle fenêtre dans la même session d'écran?

TTM
la source

Réponses:

11

Démarrez une session d'écran nommée ( -S) avec une fenêtre nommée ( -t) s'adaptant à la taille du terminal ( -A) en mode détaché ( -d -m):

screen -S mySessionName -t myWinName0 -A -d -m

Démarrez une autre fenêtre nommée ( -t) dans la même session d'écran ( -S):

screen -S mySessionName -X screen -t myWinName2

Remplissez quelques commandes ( -X stuff $'cmds') dans la première fenêtre nommée ( -p) de la session ( -S):

screen -S mySessionName -p myWinName0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'

Stuff quelques commandes ( -X stuff $'cmds') dans la fenêtre du deuxième nom ( -p) dans la session ( -S):

screen -S mySessionName -p myWinName1 -X stuff $'echo myWinName1\necho cmd1\necho cmd2\n'

Énumérez les sessions d'écran et rattachez-les pour voir ce qui s'est passé:

screen -ls
screen -r mySessionName

Remarque: le saut de ligne ( \n) simule la pression Enter. Vous pouvez également utiliser des points-virgules pour séparer les commandes.

postal
la source
Vous n'avez pas à faire les "trucs". screen -S sessionName -t windowName1 -Adm <command> && screen -S sessionName -X screen -t windowName2 -Adm <command2>
Lotus
4

Écran intérieur:

  • Ctrl-A, cpour ouvrir une nouvelle fenêtre shell
  • Ctrl-A, :screen newcmdpour courirnewcmd

À l'extérieur:

screen -X testen "screen newcmd"
user1686
la source
salut grawity , je le sais, mais j'aimerais le faire à partir d'un script init. Fondamentalement, je veux démarrer 2 commandes dans des fenêtres séparées dans la même session d'écran. on se voit
1
@bob: Voir l'exemple # 3, "Écran extérieur", dans cette réponse.
user1686
salut grawity, screen -S testen -X 'screen echo "hi"'ne fonctionne pas.
J'ai également été incapable de faire fonctionner la méthode -X. Fwiw, mon écran -v dit "Version d'écran 4.00.03 (FAU) 23-Oct-06"
Lauri Lehtinen
4

Tentative d'approche ci-dessus, mais la deuxième commande ne s'est pas exécutée sur la deuxième fenêtre. J'ai légèrement ajusté l'exemple en utilisant le numéro de fenêtre, au lieu du nom de la fenêtre:

  1. créer une session

    screen -S mySessionName -t 0 -A -d -m
    
  2. créer une deuxième fenêtre

    screen -S mySessionName -X screen -t 1
    
  3. envoyer la commande à la première fenêtre

    screen -S mySessionName -p 0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
  4. envoyer la commande à la deuxième fenêtre

    screen -S mySessionName -p 1 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
  5. vérifiez maintenant si la commande a été exécutée dans la première fenêtre

    screen -R mySessionName -p 0
    
  6. vérifiez maintenant si la commande a été exécutée dans la deuxième fenêtre

    screen -R mySessionName -p 1
    

Testé avec l'écran 4.00.03 (CENTOS 6.3 x64).

Bas van Beek BVBMedia
la source
1

Vous pouvez configurer un autre .screenrc via l' -cargument. Dans ce nouveau screenrc, vous pouvez configurer plusieurs commandes pour démarrer lorsque la session d'écran est initialisée.

À la fin de ce .screenrc alternatif, mettez les commandes suivantes:

screen 1 cmd1 args
screen 2 cmd2 args

Vous n'avez pas besoin de configurer un autre fichier de configuration si vous prévoyez d'exécuter un seul type de session d'écran et que les commandes par défaut exécutées sont toujours correctes.

Darren Hall
la source