如何表达 ( Ctrl+ a+ )以与我按以下方式使用键盘输入组合键相同的方式d安全地从会话中分离:screen
(echo -ne '\015')
我想将这些表达式放入某种脚本中,是否有 Linux 键盘按键表达式映射或类似的东西?
答案1
据我所知,没有可以在 shell 上执行的命令之内screen
将您的终端与该会话分离的会话 。screen
只查看输入从您的终端对于神奇的元字符(Ctrl- a),不在由管理的终端会话中显示的任何内容screen
本身。为了演示,我创建了一个名为的文件detachsequence
,其中包含一个Ctrl-a字符,后跟一个d
字符:
$ hexdump detachsequence
0000000 01 64
如果我cat
在screen
会话中执行此操作,则不会发生任何(值得注意的)事情;该文件将简单地显示(尽管有不可见的控制字符):
$ cat detachsequence
d
一个echo
or 也printf
同样不引人注目。
事实上,如果cat
其中的文件可以向自身screen
发送控制序列,这将是一个特别严重的安全缺陷。screen
答案2
通用解决方案可能是:
screen -d $STY
Screen 会将会话名称传递给$STY
变量,然后您就可以使用screen -d
它。
您可能希望在分离时运行命令,可以这样做:
screen -d $STY & yourcommand
笔记: screen -d
本身就足够了。您不需要指定$STY
.
您还可以启动一个首先分离的脚本:
screen -d -m /the/script
但这需要注意的是,在脚本分离之前,您没有可以与脚本交互的时间范围。如果您需要这样做,那么前一个解决方案应该是最佳选择。
其他解决方案(取决于环境):
如果您在会话中的虚拟终端上使用脚本X
,则可以利用xdotool
将控制序列发送到终端:
xdotool key control+a+d
答案3
按键Ctrl-<letter>
将字母A
to 的字符代码 1 到 26 发送给Z
。即Ctrl-Aor ^A
is 发送字符 1,or \x01
or \001
, ^B
is 2 等。回车符为\015
or 13(十进制) or ^M
。
那么,Ctrl-A d
将会是\001d
。
但是,如果您想以某种方式发送该序列screen
,则从屏幕本身内部执行此操作并不容易。 (您可以从终端执行此操作外部的screen
。)
要求screen
从脚本分离的一种更简单的方法是运行screen -X detach
,也可能使用-S
来指定要分离的屏幕并使用STY
环境变量来查找当前屏幕的标识。