如何将相同的命令发送到屏幕会话中所有窗口的子集

问题描述 投票:0回答:1

this的回答中,Corey Henderson解释了如何使用屏幕上的at和stuff命令立即向屏幕会话的所有窗口发送命令。我想知道如何将输入缓冲区同时填充到某些窗口。换句话说,我想使用过滤器来指定哪些窗口应该接收输入,哪些不应该接收。

如果我可以过滤窗口号而不是用户名或窗口名,那将是很好的,因为bash有时会更改窗口名称,并且在多台机器上修改.bashrc是不方便的。此外,有时我无法控制我正在运行命令的用户。

到目前为止,我只能在当前活动窗口或所有窗口上同时运行命令。

gnu-screen
1个回答
1
投票

我在使用atcommand时发现进行Windows过滤的唯一方法是使用Windows名称。

默认情况下,屏幕的窗口名称是在窗口中创建的程序的实际命令名称之后设置的,对我来说这通常是bash。但是,使用Ctrl+A可以将窗口名称更改为您喜欢的任何内容。如果您的Windows名称动态变化,请检查您是否启用了Dynamic Titles

因此在实践中,这意味着您可以为相关窗口提供一个公共前缀,然后使用at "prefix#" stuff "command"仅在名称与过滤器匹配的窗口上执行命令。

想象一下,我们在屏幕会话中打开了以下窗口:

0$ front1 - 1$ front2 - 2$ back1 - 3$ back2 - 4$ back3 - 5$ db1 - 6$ db2

下一个命令会将service ntpd stop命令发送到以字符串开头的窗口,即back1,back2,back3:

at "back#" stuff "service ntpd stop^M"
© www.soinside.com 2019 - 2024. All rights reserved.