Mat*_*ato 6 debian display bash gnu-screen
我读过如何自动启动多个屏幕会话?,但我不明白第一个接受的回复:
screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"
Run Code Online (Sandbox Code Playgroud)
就我而言,我需要为一个脚本自动创建一个屏幕会话,然后我需要在同一会话中为另一个脚本创建一个新窗口。手动地,我会:
如何在脚本中自动执行此操作?一个简单的例子会对我有很大帮助。
谢谢您的回复。
小智 6
startup并在独立窗口中运行command1添加新的独立窗口并运行command2
screen -dmS startup bash -c 'command1; exec bash'
screen -S startup -x -X screen bash -c 'command2; exec bash'
Run Code Online (Sandbox Code Playgroud)startup随时重新连接会话
screen -r startup
Run Code Online (Sandbox Code Playgroud)
我不太确定你想要发生什么 - 你想要一个脚本来创建带有两个命令的两个窗口的屏幕会话,还是想要在运行一个命令的屏幕窗口中运行一个脚本,然后创建一个新的第二个窗口?
第二个很简单,所以让我们从第二个开始:
#!/bin/bash
command1
screen command2
Run Code Online (Sandbox Code Playgroud)
在 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}
Run Code Online (Sandbox Code Playgroud)
该脚本将启动command1,等待完成,然后启动command2并退出。就像您运行 一样command1 ; command2 &,但输出在其他地方。我相信您可以弄清楚如何command1在后台运行。
| 归档时间: |
|
| 查看次数: |
11263 次 |
| 最近记录: |