我正在像这样启动屏幕上的第一个命令:
screen -d -m -S testen -t lalala watch df -h
这使我在后台运行一个屏幕会话,我可以稍后重新连接。
如何在同一屏幕会话的新窗口中运行第二个命令?
答案1
启动一个命名的屏幕会话 ( -S
),并使用一个命名的窗口 ( ) ,以分离模式 ( )-t
适应终端大小 ( ):-A
-d -m
screen -S mySessionName -t myWinName0 -A -d -m
-t
在同一个屏幕会话 ( ) 中启动另一个命名窗口 ( ) -S
:
screen -S mySessionName -X screen -t myWinName2
在会话 ( )-X stuff $'cmds'
中的第一个命名窗口 ( ) 中塞入一些命令 ( ):-p
-S
screen -S mySessionName -p myWinName0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
在会话 ( )-X stuff $'cmds'
中的第二个命名窗口 ( ) 中塞入一些命令 ( ) :-p
-S
screen -S mySessionName -p myWinName1 -X stuff $'echo myWinName1\necho cmd1\necho cmd2\n'
列出屏幕会话并重新连接以查看发生了什么:
screen -ls
screen -r mySessionName
注意:换行符 ( \n
) 模拟按Enter。您也可以使用分号来分隔命令。
答案2
尝试了上述方法,但第二个命令未在第二个窗口上执行。我通过使用窗口编号而不是窗口名称对示例进行了稍微调整:
创建会话
screen -S mySessionName -t 0 -A -d -m
创建第二个窗口
screen -S mySessionName -X screen -t 1
发送命令到第一个窗口
screen -S mySessionName -p 0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
发送命令到第二个窗口
screen -S mySessionName -p 1 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
现在检查命令是否已在第一个窗口运行
screen -R mySessionName -p 0
现在检查命令是否已在第二个窗口运行
screen -R mySessionName -p 1
使用 Screen 4.00.03(CENTOS 6.3 x64)进行测试。
答案3
屏幕内:
- Ctrl-A,c打开新的 shell 窗口
- Ctrl-A,
:screen newcmd
跑步newcmd
外部:
screen -X testen "screen newcmd"
答案4
您可以通过参数设置备用 .screenrc -c
。在这个新的 screenrc 中,您可以设置在屏幕会话初始化时启动的多个命令。
在这个替代的 .screenrc 的末尾放置以下命令:
screen 1 cmd1 args
screen 2 cmd2 args
如果您只打算运行一种类型的屏幕会话并且运行的默认命令始终正常,则无需设置备用配置文件。