user1506145 Asked: 2016-10-28 06:19:37 +0800 CST2016-10-28 06:19:37 +0800 CST 2016-10-28 06:19:37 +0800 CST 使用 bash 脚本在 Screen 中附加、分离和终止进程 772 我知道您可以在分离的屏幕中运行程序,但我会登录到现有屏幕,终止当前正在运行的进程,重新启动它然后分离。 是否可以使用 bash 脚本来做到这一点,例如,我如何发送 ctrl-A ctrl-D 和 Ctrl-C ? bash 2 个回答 Voted user98651 2016-10-28T06:49:55+08:002016-10-28T06:49:55+08:00 如果你想模拟击键,一个简洁的脚本语言是“期望”的。 示例期望脚本可能类似于: spawn $env(SHELL) match_max 100000 send -- "screen\n" expect eol send -- "ls\n" send -- "^Ad" expect eof 这将通过以下方式执行: expect ./myscript Best Answer Rinzwind 2016-10-28T07:02:14+08:002016-10-28T07:02:14+08:00 如果要删除屏幕,也可以删除屏幕名称/var/run/screens/{user/并执行screen -wipe. 但是 screen 有一个东西和一个paste命令: 命令:粘贴[注册[目的地]] (C-a ], C-a C-]) 将指定寄存器的(串联)内容写入当前窗口的标准输入流。寄存器'.' 被视为粘贴缓冲区。如果未指定参数,则提示用户输入单个寄存器。粘贴缓冲区可以用复制、历史和 readbuf 命令填充。其他寄存器可以用 register、readreg 和 paste 命令填充。如果使用第二个参数调用 paste,则指定寄存器的内容将粘贴到指定的目标寄存器而不是窗口中。如果 '。' 用作第二个参数,显示器的粘贴缓冲区是目标。请注意,该粘贴使用多种资源:通常需要当前窗口和当前显示。但是,只要指定了第二个参数,就不需要当前窗口。当源规范仅包含寄存器(而不是粘贴缓冲区)时,则不需要当前显示(附加终端),因为寄存器是全局资源。粘贴缓冲区为每个用户存在一次。 命令:东西{字符串} 将字符串 string 填充到当前窗口的输入缓冲区中。这类似于粘贴命令,但开销要少得多。您不能使用 stuff 命令粘贴大缓冲区。它对键绑定最有用。请参阅绑定键。 所以这有效: screen -S session_name -X at window_number stuff ^C screen -S session_name -X at window_number stuff ^X 并分别发送一个 control-c 和 control-x,您也可以使用它来组合键码(如 control a、d)
如果你想模拟击键,一个简洁的脚本语言是“期望”的。
示例期望脚本可能类似于:
这将通过以下方式执行:
如果要删除屏幕,也可以删除屏幕名称
/var/run/screens/{user/
并执行screen -wipe
.但是 screen 有一个东西和一个
paste
命令:命令:粘贴[注册[目的地]]
命令:东西{字符串}
所以这有效:
并分别发送一个 control-c 和 control-x,您也可以使用它来组合键码(如 control a、d)