如何在同一屏幕会话中运行第二个命令

12 linux gnu-screen

我在屏幕中启动第一个命令,如下所示:

screen -d -m -S testen -t lalala watch df -h
Run Code Online (Sandbox Code Playgroud)

这给了我一个在后台运行的屏幕会话,我可以稍后重新连接。

如何在同一屏幕会话的新窗口中运行第二个命令?

小智 11

在分离模式 ( )下,使用适应终端大小 ( )-S的命名窗口 ( -t)启动命名屏幕会话-A( -d -m):

screen -S mySessionName -t myWinName0 -A -d -m
Run Code Online (Sandbox Code Playgroud)

-t在同一个屏幕会话 ( -S) 中启动另一个命名窗口( ):

screen -S mySessionName -X screen -t myWinName2
Run Code Online (Sandbox Code Playgroud)

将一些命令 ( -X stuff $'cmds')填充到-p会话 ( -S) 中的第一个命名窗口 ( ) 中:

screen -S mySessionName -p myWinName0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
Run Code Online (Sandbox Code Playgroud)

将一些命令 ( -X stuff $'cmds')填充到-p会话 ( -S) 中的第二个命名窗口 ( ) 中:

screen -S mySessionName -p myWinName1 -X stuff $'echo myWinName1\necho cmd1\necho cmd2\n'
Run Code Online (Sandbox Code Playgroud)

列出屏幕会话并重新连接以查看发生了什么:

screen -ls
screen -r mySessionName
Run Code Online (Sandbox Code Playgroud)

注意:换行符 ( \n) 模拟按下Enter。您也可以使用分号来分隔命令。


小智 6

尝试了上述方法,但第二个命令没有在第二个窗口上执行。我通过使用窗口编号而不是窗口名称稍微调整了示例:

  1. 创建会话

    screen -S mySessionName -t 0 -A -d -m
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建第二个窗口

    screen -S mySessionName -X screen -t 1
    
    Run Code Online (Sandbox Code Playgroud)
  3. 发送命令到第一个窗口

    screen -S mySessionName -p 0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
    Run Code Online (Sandbox Code Playgroud)
  4. 发送命令到第二个窗口

    screen -S mySessionName -p 1 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
    Run Code Online (Sandbox Code Playgroud)
  5. 现在检查命令是否已在第一个窗口上运行

    screen -R mySessionName -p 0
    
    Run Code Online (Sandbox Code Playgroud)
  6. 现在检查命令是否已在第二个窗口上运行

    screen -R mySessionName -p 1
    
    Run Code Online (Sandbox Code Playgroud)

使用 Screen 4.00.03 (CENTOS 6.3 x64) 进行测试。


use*_*686 4

内屏:

  • Ctrl-A,c打开一个新的 shell 窗口
  • Ctrl-A:screen newcmd跑步newcmd

外部:

screen -X testen "screen newcmd"
Run Code Online (Sandbox Code Playgroud)