如何在同一屏幕会话中自动启动新窗口?

如何在同一屏幕会话中自动启动新窗口?

我读如何自动启动多个屏幕会话?,但我不明白第一个被接受的答复:

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

在我的例子中,我需要为一个脚本自动创建一个屏幕会话,之后我需要在同一个会话中为另一个脚本创建一个新窗口。手动的话,我会:

  1. 运行屏幕
  2. 输入命令
  3. CTRL+A
  4. CTRL+C
  5. 输入命令
  6. CTRL+A
  7. CTRL+D

我如何在脚本中自动执行此操作?一个简单的示例对我有很大帮助。

谢谢各位的回复。

答案1

我不太确定你想要发生什么 - 你想要一个脚本来为两个命令创建具有两个窗口的屏幕会话,还是你想在运行一个命令的屏幕窗口中运行一个脚本,然后为第二个命令创建一个新窗口?

第二个很简单,让我们从这里开始:

#!/bin/bash
command1
screen command2

在 screen 中运行“screen”将在当前会话中创建一个新窗口,而不是启动一个新窗口。但它会立即返回,因此在最后一行之后,脚本将退出,而 command2 仍在运行。当 command2 完成后,其窗口将关闭。

无论如何,对你的问题的第一个解释有点困难,所以让我们继续解决上述问题:

#!/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在后台运行。

答案2

  1. 启动会话startup并在分离窗口中运行command1
  2. 添加新的分离窗口并运行command2

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

startup随时重新连接会话

screen -r startup

答案3

screen -dm 在后台创建一个运行您指定的命令的会话。

所以如果你把

screen -dm vi xxx
screen -dm vi yyy

在您的脚本中,您将有 2 个会话,一个编辑 xxx,一个编辑 yyy。

screen -ls将列出会话,您可以使用screen -r <session number>

这不太方便,因为需要找到会话编号。这就是它的作用-S所在。

screen -dmS session1 vi xxx

将创建一个名为 session1 的独立会话,因此如果你将脚本更改为

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

你可以选择要附加的会话screen -r session1screen -r session2

相关内容