#!/usr/bin/env rust-script //! ```cargo //! [dependencies] //! home = "0.5.5" //! ``` use std::{ fs, process::{Command, Stdio}, }; fn main() { let os = judge_os(); println!("os: {os:?}"); let shell = judge_shell(); println!("shell: {shell:?}"); match Command::new("cargo").arg("b").status() { Ok(_) => println!("cargo build success"), Err(e) => { println!("cargo build failed {e:?}"); return; } } let home = home::home_dir().unwrap(); let source = match os { Os::Linux => "./target/debug/easychangedirectory", Os::Windows => "./target/debug/easychangedirectory.exe", }; let destination = match os { Os::Linux => home.join(".cargo/bin/easychangedirectory"), Os::Windows => home.join(".cargo/bin/easychangedirectory.exe"), }; match fs::copy(source, destination) { Ok(_) => println!("copy success"), Err(e) => { println!("copy failed: {e:?}"); return; } } } #[allow(unused)] #[derive(Debug)] enum Shell { Bash, PowerShell, } fn judge_shell() -> Shell { match Command::new("echo").arg("").stdout(Stdio::null()).status() { Ok(_) => return Shell::Bash, Err(_) => return Shell::PowerShell, }; } #[allow(unused)] #[derive(Debug)] enum Os { Linux, Windows, } fn judge_os() -> Os { #[cfg(target_os = "linux")] return Os::Linux; #[cfg(target_os = "windows")] return Os::Windows; }