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

如何使用entr在保存Rust文件时自动编译运行及排查错误?

Hey,我来帮你搞定这个entr配合Rust自动编译运行的问题,还有你遇到的那个错误~

用entr自动编译运行Rust文件的正确方法

先解决你碰到的报错

你执行的命令ls test.rs | entr -c "rustc test.rs && ./test"报错entr: exec rustc test.rs && ./test: No such file or directory,核心原因是:entr默认会把整个引号里的内容当作单个可执行文件来查找,它不认识shell的&&语法——这个语法是需要shell(比如sh/bash)来解析执行命令链的。

解决办法很简单,把你的命令用sh -c或者bash -c包裹起来,让entr调用shell去处理命令链:

ls test.rs | entr -c sh -c "rustc test.rs && ./test"

如果你的系统默认shell是bash,也可以换成bash -c,效果是一样的。

更通用的写法(适配多文件/动态文件名)

如果你的项目有多个.rs文件,或者不想每次硬编码文件名,可以利用entr的$0变量——它会指代当前被监控的文件。这样不管你监控哪个.rs文件,都能自动编译并运行对应的可执行文件:

printf "%s\n" *.rs | entr -c sh -c "rustc $0 && ./${0%.rs}"

这里的${0%.rs}是shell的参数扩展,用来去掉文件名的.rs后缀,生成对应的可执行文件名称。

几个实用的进阶技巧

  • 用-r替代-c:如果你的Rust程序是长期运行的(比如web服务器),entr -r会先杀掉之前运行的进程,再执行新命令,避免旧进程占用端口或资源:
    ls test.rs | entr -r sh -c "rustc test.rs && ./test"
    
  • 配合Cargo项目:如果是用Cargo管理的Rust项目,直接监控src目录下的所有.rs文件,自动触发cargo run:
    find src -name "*.rs" | entr -r cargo run
    
  • 更可靠的文件列表生成:有时候ls处理带空格的文件名会出问题,用printf "%s\n" *.rs代替ls *.rs更稳妥:
    printf "%s\n" test.rs | entr -c sh -c "rustc $0 && ./${0%.rs}"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:35:54