You need to enable JavaScript to run this app. 如何获取通过screen的stuff命令发送指令后返回的输出?
优惠活动
大模型
产品
解决方案
定价
更多

如何获取通过screen的stuff命令发送指令后返回的输出?

screen -X stuff 命令本身仅负责将字符注入目标screen会话的输入缓冲区,无任何返回内容,所以你用命令替换$()捕获到的内容必然为空。

方案1:继续使用screen捕获输出

操作步骤如下:

  • 发送指令时统一用\r作为换行符,适配不同终端的换行识别逻辑:
    screen -S accounts_hash -X stuff "total$(printf '\r')"
    
  • 等待程序执行完成(根据你的程序响应速度加延迟,一般0.1秒足够):
    sleep 0.1
    
  • 导出当前screen会话的屏幕内容到临时文件:
    screen -S accounts_hash -X hardcopy /tmp/accounts_hash_output.tmp
    
  • 读取临时文件内容过滤目标输出即可,用完可直接删除临时文件。

方案2:更优的后台REPL交互方案

你之前直接写/proc/PID/fd/0无效的原因是大部分REPL程序仅在伪终端(PTY)环境下才会按行解析输入,直接写入普通文件描述符不会触发程序的输入解析逻辑。推荐以下替代方案:

  • 可修改程序的最优方案:给Rust程序新增Unix域套接字(UDS)监听能力,程序启动时监听本地套接字文件(如/run/accounts_hash.sock),外部程序直接向套接字发送指令、接收返回结果,无中间层损耗,稳定性最高,Rust标准库和第三方异步runtime都有成熟的UDS实现。
  • 无需改程序的轻量方案:用socat为程序绑定一个伪终端,启动命令如下:
    socat PTY,link=/tmp/accounts_repl,raw,echo=0 EXEC:/path/to/your/rust/program
    
    后续直接向/tmp/accounts_repl写入指令,读取该文件即可拿到输出,无需依赖screen/tmux这类终端多路复用器。
  • 习惯用终端多路复用器的替代方案:用tmux代替screen,捕获输出无需写临时文件,发指令后直接执行:
    tmux capture-pane -pt accounts_hash
    
    即可将当前会话的所有内容输出到标准输出,直接用管道过滤即可拿到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 13:54:04