通过阅读这个线程,看起来可以使用shebang来运行Rust *。
#!/usr/bin/env rustc
fn main() {
println!("Hello World!");
}
使其可执行并运行会编译,但不会运行代码。
chmod +x hello_world.rs
./hello_world.rs
但是,这只会将代码编译为hello_world
。*.rs
文件可以像shell脚本一样直接执行吗?
- 这引用了rustx,我研究了一下,但它是一个bash脚本,每次都编译脚本(没有缓存),从不从temp目录中删除文件,尽管这可以改进。
5条答案
按热度按时间abithluo1#
还有
cargo-script
。它也允许你使用依赖项。通过
cargo install cargo-script
安装cargo-script
后,您可以像这样创建脚本文件(hello.rs
):要执行它,您需要:
要使用来自www.example.com的板条crates.io,请参阅上面链接的README中的教程。
57hvy0tb2#
这似乎起作用:
woobm2wo3#
我写了一个工具,就是为了这个:Scriptisto。它是一个完全与语言无关的工具,它可以与其他编译语言或具有昂贵验证步骤的语言(Python和mypy)一起使用。
对于Rust,它还可以在幕后获取dependencies,或者完全在Docker中构建,而无需安装Rust编译器。
scriptisto
将这些模板嵌入到二进制文件中,以便您可以轻松引导:你可以使用
new docker-rust
来代替new rust
,并且构建不需要在你的主机系统上使用Rust编译器。iugsix8n4#
需要货物播放。您可以看到一个不需要任何东西的解决方案here:
oymdgrw75#
虽然其他答案都很好,但我想要一种简单的方法来编译,缓存和运行一个独立的脚本。我的理由是,如果我发布的脚本依赖于安装的rust,我可能不能同时依赖于安装的一些第三方库来编译它。
如果我需要传递多个文件,我可能只传递一个预编译的二进制文件。如果我的脚本/程序的用例足够复杂,那么我可能在git repo中通过标准的
cargo build
进程。因此,对于仅依赖于rust和标准库的单个文件,请使用如下所示的
hello.rs
文件:为了帮助理解shebang在做什么,尝试这个。它做同样的事情,但更容易维护:
此解决方案基于
wimh
的解决方案,但具有以下附加功能:1.将编译后的脚本,也就是程序,缓存在脚本所在的目录中。当脚本的目录被添加到路径中时,这也有效。
1.将脚本的命令行参数传递给程序。
1.脚本的退出代码与程序或编译器的退出代码相同。
注意:shebang脚本依赖于具有某种文件后缀的脚本文件,例如
.rs
或.sh
。如果没有这些,编译器将抱怨用生成的可执行文件覆盖脚本文件。我的测试表明,与直接运行编译后的程序相比,该脚本增加了大约10 ms的开销。
编辑:有一个RFC in progress添加一个类似于Scriptisto的解决方案到生 rust 的核心,使一个标准的方式来解决OP的问题。