把 Rust 当作(伪)脚本用。这是我从飞书 ffmpeg 的绑定库里看到的:#!/bin/sh #![allow(unused_attributes)] /* OUT=/tmp/tmp && rustc "$0" -o ${OUT} && exec ${OUT} $@ || exit $? #*/ use std::process::Command; use std::io::Result; use std::path::PathBuf; use std::fs; fn mkdir(dir_name: &str) -> Result<()> { fs::create_dir(dir_name) } fn main() { // 省略 } 重点是前三行。写的很巧妙,既是合法的 rust 语法,又是合法的 shell 语法。第一行 shebang 指定了用 sh 执行该脚本,而 rustc 本身也会忽略 shebang 行,没啥好说的。第二行声明了 rust 的一个内部属性,因为语法是 # 开头,所以刚好也是 shell 语法的注释行。结尾用了 rust 的多行注释,完全忽略第三行。而 shell 免疫 rust 的多行注释,所以第三行正常执行。其实就是用 rustc 编译当前文件到二进制程序再执行并退出。剩下的部分就是 rust 的逻辑了。
我吃