我知道你可以在分离的屏幕,但我会登录到现有屏幕,终止当前正在运行的进程,重新启动它,然后分离。
是否可以使用 bash 脚本来做到这一点,例如如何发送 ctrl-A ctrl-D 和 Ctrl-C?
答案1
如果您想模拟击键,一种简洁的脚本语言就是“expect”。
示例期望脚本可能类似于:
spawn $env(SHELL)
match_max 100000
send -- "screen\n"
expect eol
send -- "ls\n"
send -- "^Ad"
expect eof
这将通过以下方式执行:
expect ./myscript
答案2
如果您想删除屏幕,您也可以删除屏幕名称/var/run/screens/{user/
并执行screen -wipe
。
但屏幕有一个东西和一个paste
命令:
命令:粘贴 [寄存器 [目标]]
(C-a ], C-a C-])
将指定寄存器的(连接)内容写入当前窗口的标准输入流。寄存器“。”被视为粘贴缓冲区。如果未指定任何参数,则提示用户输入单个寄存器。可以使用 copy、history 和 readbuf 命令填充粘贴缓冲区。可以使用 register、readreg 和 paste 命令填充其他寄存器。如果使用第二个参数调用 paste,则指定寄存器的内容将粘贴到命名的目标寄存器中,而不是窗口中。如果使用“。”作为第二个参数,则显示器的粘贴缓冲区是目标。请注意,粘贴使用各种资源:通常需要当前窗口和当前显示器。但只要指定了第二个参数,就不需要当前窗口。当源规范仅包含寄存器(而不是粘贴缓冲区)时,就不需要当前显示器(附加终端),因为寄存器是全局资源。每个用户都有一个粘贴缓冲区。
命令:stuff {string}
将字符串 string 填充到当前窗口的输入缓冲区中。这类似于 paste 命令,但开销要小得多。您不能使用 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)