向特定的屏幕会话发送ctrl-c信号

14

我正在设计一个脚本,在一个指定的screen会话中启动一个进程。

as_user "screen -p 0 -S **$command** -X eval 'stuff \"wine LFS.exe /cfg=**$command**.cfg\"\015'"

那么,bash myscript.sh start test 将创建一个名为test的Screen,并使用软件运行test.cfg

现在我希望我的脚本可以访问特定的Screen会话,并执行CTRL+C来停止正在运行的进程,以便我可以杀死Screen会话。

类似这样:

as_user "screen -p 0 -S **$command** **... kill the process with ctrl-c...**"
as_user "screen -p 0 -S **$command** -X eval 'stuff \"exit\"\015'"
1个回答

27

我不是很理解你的意思,但是要将ctrl-c发送到屏幕会话中的一个窗口

screen -S session_name -X at window_number stuff $'\003'
# or
screen -S session_name -X -p window_number stuff $'\003'

如果您想将信息发送到所有窗口,请使用window_number #(需要用引号引起来)。

更新:

Screen的stuff命令还支持^X(或^x)表示CTRL-X,因此以下命令也可以用于发送CTRL-C

# Here '^C' is two chars, '^' and 'C'
screen -S session_name -X at window_number stuff '^C'

2
无法让 at 正常工作,但是这个命令对于当前活动窗口有效,可能对某些人有用:screen -S session_name -X stuff $'\003' - Billy Moon
太棒了,这正是我在寻找的!您是否有关于 $'\003' 编码的更多信息?我可以假设 Ctrl+A 是 001,Ctrl+B 是 002 等吗?此外,是否有一种方法可以发送光标上、下、左、右键? - RocketNuts
1
请看控制字符 https://en.wikipedia.org/wiki/Control_character#How_control_characters_map_to_keyboards。 - pynexj
要发送光标向上/向下/向左/向右,您可以首先使用tput获取控制序列。例如,要获取光标向上的控制序列,您可以使用tput cuu1。更多详细信息请参见terminfo(5) - pynexj
谢谢!screen -S session_name -X at window_number stuff '^C' 在 CentOS 7 上非常好用。 - Binita Bharati
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接