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.