You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向screen会话中的部分窗口发送相同命令

按指定窗口号向screen部分窗口发送输入的方法

刚好之前折腾过screen的批量操作,针对你要按窗口号筛选发送命令的需求,咱们可以用循环结合screen的内置命令来实现,具体步骤如下:

1. 先确认目标screen会话名称

首先用下面的命令列出当前所有screen会话,找到你要操作的那个会话名称(比如my_project):

screen -list

2. 向指定窗口号发送命令

如果你已经明确知道要给哪些窗口发命令(比如窗口1、3、5),直接用循环遍历这些窗口号,对每个窗口单独执行stuff命令写入输入缓冲区:

# 替换成你的会话名、目标窗口号和要发送的命令
TARGET_SESSION="my_project"
TARGET_WINDOWS="1 3 5"
COMMAND_TO_SEND="ls -l\n"

for win in $TARGET_WINDOWS; do
    screen -S $TARGET_SESSION -p $win -X stuff "$COMMAND_TO_SEND"
done

这里的参数解释:

  • -S $TARGET_SESSION:指定要操作的screen会话
  • -p $win:锁定目标窗口号(循环变量依次取你指定的窗口号)
  • -X stuff "$COMMAND_TO_SEND":向该窗口的输入缓冲区写入内容,\n模拟回车键执行命令

3. 排除特定窗口发送命令

如果需要给除了某个窗口之外的所有窗口发命令,比如排除窗口2,可以先提取会话内的所有窗口号,再过滤掉要排除的窗口:

TARGET_SESSION="my_project"
EXCLUDE_WINDOW="2"
COMMAND_TO_SEND="echo 'Hello to all except window 2'\n"

# 提取所有窗口号
ALL_WINDOWS=$(screen -S $TARGET_SESSION -Q windows | awk '{for(i=1;i<=NF;i++) if($i~/^[0-9]+$/) print substr($i,1,length($i)-1)}')

# 遍历排除后的窗口号发送命令
for win in $ALL_WINDOWS; do
    if [ "$win" != "$EXCLUDE_WINDOW" ]; then
        screen -S $TARGET_SESSION -p $win -X stuff "$COMMAND_TO_SEND"
    fi
done

其中screen -S $TARGET_SESSION -Q windows会输出会话内所有窗口的信息,再用awk提取出纯窗口号(去掉后面的$符号)。

小提示

  • 如果你不确定窗口号,可以在screen会话内按下Ctrl+a + "(双引号),弹出窗口列表查看每个窗口对应的数字编号
  • 注意不同screen版本的窗口号可能从0或1开始,建议用screen -Q windows命令确认实际编号

内容的提问来源于stack exchange,提问作者Chancelot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:21:56