Rust脚本执行工具rust-script的使用:无需编译直接运行.rs文件的高效开发体验
Rust脚本执行工具rust-script的使用:无需编译直接运行.rs文件的高效开发体验
rust-script是一个可以直接运行Rust脚本文件的工具,无需任何设置或显式编译步骤,并且可以在脚本文件中无缝使用指定的crate依赖。
安装rust-script
cargo install rust-script
示例用法
以下是内容中提供的示例:
#!/usr/bin/env rust-script
//! 依赖可以直接在脚本文件中指定如下:
//!
//! ```cargo
//! [dependencies]
//! rand = "0.8.0"
//! ```
use rand::prelude::*;
fn main() {
// 生成随机数
let x: u64 = random();
println!("随机数: {}", x);
}
完整示例demo
下面是一个更完整的示例,展示如何使用rust-script编写带有依赖的Rust脚本:
#!/usr/bin/env rust-script
//! 这是一个文件操作脚本示例
//!
//! ```cargo
//! [dependencies]
//! walkdir = "2.3"
//! anyhow = "1.0"
//! ```
use walkdir::WalkDir;
use anyhow::Result;
fn main() -> Result<()> {
// 遍历当前目录
for entry in WalkDir::new(".")
.into_iter()
.filter_map(|e| e.ok())
{
// 获取文件路径
let path = entry.path();
if path.is_file() {
// 打印文件信息
println!("文件名: {}", path.display());
println!("文件大小: {} bytes", path.metadata()?.len());
println!("---");
}
}
Ok(())
}
使用说明
- 在脚本第一行添加shebang:
#!/usr/bin/env rust-script
- 在注释中指定依赖(使用cargo.toml格式)
- 给脚本添加可执行权限:
chmod +x script.rs
- 直接运行脚本:
./script.rs
系统要求
Rust版本1.64或更高版本。
相关项目
- cargo-script - rust-script从中fork出来的未维护项目
- cargo-eval - cargo-script的维护分支
- cargo-play - 本地Rust playground
- runner - 用于运行Rust代码片段的工具
- scriptisto - 与语言无关的"shebang解释器",可以用编译语言编写脚本
许可证
rust-script主要根据MIT许可证和Apache许可证(版本2.0)的条款分发。
1 回复
Rust脚本执行工具rust-script的使用指南
简介
rust-script是一个让Rust代码像脚本语言一样直接运行的工具,无需手动编译步骤。它允许开发者直接执行.rs文件,极大地简化了小型Rust程序或快速原型的开发流程。
安装方法
使用Cargo安装rust-script:
cargo install rust-script
基本使用方法
直接运行.rs文件
rust-script your_script.rs
示例脚本
创建一个简单的hello.rs
文件:
// hello.rs
fn main() {
println!("Hello, rust-script!");
println!("This is running without explicit compilation!");
}
然后直接运行:
rust-script hello.rs
高级功能
1. 依赖管理
rust-script支持在脚本中直接声明依赖:
//! ```cargo
//! [dependencies]
//! rand = "0.8"
//! ```
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
println!("Random number: {}", rng.gen_range(1..=100));
}
2. 脚本参数
可以像普通Rust程序一样访问命令行参数:
// args.rs
fn main() {
for (i, arg) in std::env::args().enumerate() {
println!("arg {}: {}", i, arg);
}
}
运行:
rust-script args.rs first second third
3. 缓存控制
rust-script会缓存编译结果以提高性能。如果需要强制重新编译:
rust-script --clear-cache your_script.rs
4. 表达式模式
直接执行Rust表达式而不需要完整的main函数:
rust-script --expr 'println!("1 + 2 = {}", 1 + 2)'
实际应用示例
文件处理脚本
// file_stats.rs
use std::env;
use std::fs;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
eprintln!("Usage: {} <filename>", args[0]);
return;
}
let filename = &args[1];
match fs::metadata(filename) {
Ok(metadata) => {
println!("File: {}", filename);
println!("Size: {} bytes", metadata.len());
println!("Type: {}", if metadata.is_dir() { "directory" } else { "file" });
}
Err(e) => eprintln!("Error: {}", e),
}
}
运行:
rust-script file_stats.rs Cargo.toml
完整示例DEMO
下面是一个完整的rust-script示例,展示了如何创建一个HTTP请求脚本:
// http_request.rs
//! ```cargo
//! [dependencies]
//! reqwest = { version = "0.11", features = ["blocking"] }
//! tokio = { version = "1.0", features = ["full"] }
//! ```
use reqwest::blocking::get;
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
// 发送HTTP GET请求
let resp = get("https://httpbin.org/get")?;
// 输出响应状态和内容
println!("Status: {}", resp.status());
println!("Headers:\n{:#?}", resp.headers());
println!("Body:\n{}", resp.text()?);
Ok(())
}
运行方法:
rust-script http_request.rs
优势
- 快速迭代:无需手动编译,直接修改和运行
- 依赖管理:内联Cargo.toml依赖声明
- 便携性:单个.rs文件包含所有逻辑和依赖信息
- 缓存优化:自动重用之前的编译结果
注意事项
- 首次运行某个脚本会有编译延迟
- 适合小型工具和原型开发,大型项目仍建议使用标准Cargo工作流
- 脚本中的依赖声明使用特殊注释语法
rust-script为Rust开发者提供了类似Python等脚本语言的即时执行体验,是快速测试想法或编写实用小工具的理想选择。