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

Linux/macOS下如何将P的stdout直接传递给仅读取文件的C程序?

无需临时磁盘文件实现生产者输出到仅支持文件读取的消费者

核心解决方案:进程替换(推荐)

在Linux和macOS的bash/zsh等现代shell中,进程替换是最简便的方案,它会自动创建临时管道类文件描述符,让消费者程序误以为读取的是普通文件,但实际数据仅在内存中流转,不会写入磁盘。

语法格式:

./C -f <(P)

结合你的实际场景(1Password CLI + kinit),具体命令示例:

kinit -kt <(op read op://your-vault/your-keytab-item) your-user@YOUR-REALM.COM

原理说明

<(P) 会触发shell创建临时FIFO或/dev/fd下的文件描述符,将生产者P的输出导向该描述符,同时把描述符路径传给消费者C。整个过程无磁盘写入,命令执行完成后shell会自动清理临时资源,无需手动操作。

备选方案:手动创建命名管道(FIFO)

若你的shell不支持进程替换(极少情况),可手动创建命名管道:

  1. 创建临时FIFO:
    mkfifo /tmp/keytab-fifo
    
  2. 后台运行生产者,将输出写入FIFO:
    op read op://your-vault/your-keytab-item > /tmp/keytab-fifo &
    
  3. 运行消费者读取FIFO:
    kinit -kt /tmp/keytab-fifo your-user@YOUR-REALM.COM
    
  4. 执行完成后删除FIFO(可选,FIFO本身不存储数据):
    rm /tmp/keytab-fifo
    

注意事项

  • 命名管道仅作为数据传输通道,不会将数据持久化到磁盘;
  • 需确保生产者先启动写入,再运行消费者(或用子shell同步执行);
  • 若消费者需多次读取文件内容,管道机制可能不适用(管道数据读取一次后即消失),但kinit读取keytab仅需一次,完全适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:20:02