4 votes

Comment démarrer automatiquement une nouvelle fenêtre dans la même session d'écran ?

Je lis Comment puis-je lancer automatiquement plusieurs sessions d'écran ? mais je ne comprends pas la première réponse acceptée :

screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"

Dans mon cas, je dois créer automatiquement une session d'écran pour un script, et ensuite je dois créer une nouvelle fenêtre dans la même session pour un autre script. Manuellement, je le ferais :

  1. écran de marche
  2. entrer la commande
  3. CTRL + A
  4. CTRL + C
  5. entrer la commande
  6. CTRL + A
  7. CTRL + D

Comment puis-je faire cela automatiquement dans un script ? Un exemple simple me serait d'une grande aide.

Merci pour les réponses.

4voto

Yuriy Tumakha Points 141
  1. Début de la session startup et exécuter dans une fenêtre détachée command1
  2. Ajouter une nouvelle fenêtre détachée et exécuter command2

    screen -dmS startup bash -c 'command1; exec bash'
    screen -S startup -x -X screen bash -c 'command2; exec bash'

Fixez à nouveau la session startup à tout moment

screen -r startup

2voto

parkydr Points 2234

screen -dm crée une session en arrière-plan qui exécute la commande que vous avez spécifiée.

Donc si vous mettez

screen -dm vi xxx
screen -dm vi yyy

dans votre script, vous aurez 2 sessions, l'une éditant xxx et l'autre éditant yyy.

screen -ls listera les sessions, auxquelles vous pouvez vous attacher en utilisant la fonction screen -r <session number>

Ce n'est pas très pratique car il faut trouver le numéro de la session. C'est là que -S vient.

screen -dmS session1 vi xxx

va créer une session détachée appelée session1 donc si vous changez votre script en

screen -dmS session1 vi xxx
screen -dmS session2 vi yyy

vous pouvez choisir la session à laquelle vous voulez vous attacher avec screen -r session1 o screen -r session2

1voto

Gabe Points 2040

Je ne suis pas exactement sûr de ce que vous voulez qu'il se passe - voulez-vous un script qui crée la session écran avec deux fenêtres pour deux commandes, ou voulez-vous exécuter un script dans une fenêtre écran qui exécute une commande, puis crée une nouvelle fenêtre pour la seconde ?

Le deuxième est facile, alors commençons par ça :

#!/bin/bash
command1
screen command2

L'exécution de "screen" dans screen créera une nouvelle fenêtre dans la session en cours, et non une nouvelle. Mais il reviendra immédiatement, donc après la dernière ligne ici, le script sortira alors que command2 est toujours en cours d'exécution. Et lorsque la commande2 aura terminé, sa fenêtre se fermera.

La première interprétation de votre question est un peu plus difficile de toute façon, alors allons-y et résolvons la question ci-dessus pendant que nous y sommes :

#!/bin/bash

# Need to positively identify the session name:
SESSION=mysession.$$
echo "TO ATTACH TO SESSION: screen -r ${SESSION}"

# For signalling and stuff
FLAGDIR=$(mktemp -d)

# To keep the windows around after the commands are done,
# set the "zombie" option (see the man-page)
echo "source $HOME/.screenrc" > ${FLAGDIR}/screenrc
echo "zombie xy" >> ${FLAGDIR}/screenrc

# Use that temporary screenrc; create a detached session:
screen \
    -c ${FLAGDIR}/screenrc \
    -d -m \
    -S ${SESSION} \
    bash -c "command1 ; touch ${FLAGDIR}/done"

# Wait for command1 to terminate
while [[ ! -f ${FLAGDIR}/done ]] ; do sleep 1 ; done

# Now start command2 in a new window, by sending a remote command:
screen -S $SESSION -X screen command2

# Don't need this any more:
rm -rf ${FLAGDIR}

Le script va lancer command1 attendez qu'elle soit terminée, puis lancez-la. command2 et sortir. Comme si vous aviez exécuté command1 ; command2 & mais avec la sortie ailleurs. Je suis sûr que vous pouvez trouver comment exécuter command1 en arrière-plan.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X