Я не совсем уверен, что вы хотите, чтобы произошло: вы хотите сценарий, который создает сеанс экрана с двумя окнами для двух команд, или вы хотите запустить скрипт в окне экрана, который запускает одну команду, а затем создает новый окно для второго?
Второе легко, поэтому начнем с этого:
#!/bin/bash
command1
screen command2
Запуск "экрана" на экране создаст новое окно в текущем сеансе, а не начнет новое. Но он сразу же вернется, поэтому после последней строки сценарий завершится, пока command2 все еще выполняется. И когда команда2 завершена, ее окно закроется.
Первое толкование вашего вопроса в любом случае немного сложнее, так что давайте продолжим и решим вышеизложенное во время обсуждения:
#!/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}
Скрипт запустит command1
, подождите, пока это не будет сделано, затем запустите command2
и выйдите. Как будто вы запустите command1 ; command2 &
, но с выводом в другом месте. Я уверен, что вы можете понять, как запустить command1
в фоновом режиме.