如何在Unix系统上直接执行Rust代码?(使用shebang)

ide*_*n42 14 shebang rust

通过阅读这个帖子,看起来可以使用shebang来运行Rust*.

#!/usr/bin/env rustc

fn main() {
    println!("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)

使这个可执行文件运行并编译,但不运行代码.

chmod +x hello_world.rs
./hello_world.rs
Run Code Online (Sandbox Code Playgroud)

但是这只会将代码编译成hello_world.

可以*.rs文件可以直接执行,类似于一个shell脚本?


*这引用了rustx,我查看了这个,但是它是一个bash脚本,每次都编译脚本(没有缓存)并且永远不会从temp目录中删除文件,尽管这可以改进.它也有很大的局限性,它不能使用板条箱.

DK.*_*DK. 15

cargo-script.这也允许您使用依赖项.

安装cargo-scriptvia后cargo install cargo-script,您可以hello.rs像这样创建脚本文件():

#!/usr/bin/env run-cargo-script

fn main() {
    println!("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)

要执行它,您需要:

$ chmod +x hello.rs
$ ./hello.rs
   Compiling hello v0.1.0 (file://~/.cargo/.cargo/script-cache/file-hello-d746fc676c0590b)
    Finished release [optimized] target(s) in 0.80 secs
Hello World!
Run Code Online (Sandbox Code Playgroud)

要使用crates.io中的crates,请参阅上面链接的README中的教程.

  • 这可能是当时回答的最佳答案,但不幸的是,cargo-script 项目似乎已被放弃。新读者可能想检查其他答案,看看它们是否更合适。我选择 scriptisto 供我个人使用。 (2认同)

wim*_*ica 5

这似乎有效:

#!/bin/sh
//usr/bin/env rustc $0 -o a.out && ./a.out && rm ./a.out ; exit

fn main() {
    println!("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)

  • 如果运行 `a.out` 返回非零退出代码,`&&` 将无法删除 `a.out`。 (2认同)
  • `//usr/bin/env rustc $0 -o a.out && ./a.out; rm -f a.out;exit` 这样更好吗? (2认同)