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

zsh是否有便捷语法可直接生成临时文件作为命令行参数的一行实现?

问题原因解释

  • 执行realpath <<<'foo'报错的原因:<<<(here-string)的作用是将字符串传入命令的标准输入,但realpath本身仅读取命令行位置参数传入的路径,不会处理标准输入内容,因此会判定没有传入必要参数,抛出missing operand错误。
  • 执行realpath <(<<<'foo')返回管道路径的原因:<(...)是进程替换语法,zsh会创建匿名管道,将<<<'foo'的内容写入管道,再把管道的虚拟路径(/proc下的文件描述符路径)作为参数传给realpath。但管道不是常规磁盘文件,不支持随机读写等常规文件操作,因此很多目标程序无法兼容这种路径。

zsh 一行实现方案

zsh 提供了特有的=(...)进程替换语法,和<(...)的核心区别是:它会自动创建一个临时常规磁盘文件,把命令输出写入该文件,执行完成后自动清理这个临时文件,完全满足你需要真实文件路径的需求。
你可以直接这样写:

# 示例:将内容为foo的临时文件路径传给realpath
realpath =(<<<'foo')

测试printf的效果如下:

❯ printf "%q" =(<<<'foo')
/tmp/zshR52jXc%

返回的/tmp/zshR52jXc就是真实存在的临时磁盘文件路径,所有兼容常规文件的程序都可以正常读取。
如果你需要临时文件保留更长时间、或者需要自定义临时文件规则,也可以用传统的链式命令写法:

# 自行控制临时文件的创建、使用和删除
f=$(mktemp) && echo 'foo' > "$f" && 你的目标命令 "$f" && rm "$f"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:00