NOTO

Rustでコマンドライン引数を受け取る

 Date:2019-09-05 15:13:31 +0900
 Categories: TECHNOLOGY

こちらの続きです。コマンドラインで引数を受け取って、それによって表示を切り分けるようなものを作ってみました。色々考慮足りないですが、とりあえず動かすです。

https://note.katsumataryo.com/tech/2019/09/1452.html

code

use std::fs;

use std::env;

fn main() {

let args: Vec<String> = env::args().collect();

let target_path:String;

if args.len() > 1 {

target_path = format!("./{}", &args[1]);

} else {

target_path = "./".to_string();

}

let paths = fs::read_dir(target_path).unwrap();

for path in paths {

println!("{}", path.unwrap().path().display())

}

}

run

# 実際の状態

$ ls

Cargo.lock Cargo.toml src target

引数なし

$ cargo run

Compiling ls v0.1.0 (/Users/ryo/works/RYO/rust/ls)

Finished dev [unoptimized + debuginfo] target(s) in 0.33s

Running target/debug/ls

./Cargo.toml

./target

./Cargo.lock

./.gitignore

./.git

./src

引数があり

$ cargo run src

Finished dev [unoptimized + debuginfo] target(s) in 0.00s

Running target/debug/ls src

./src/main.rs

前のディレクトリも一応見える(見え方の良し悪しはさておき)

$ cargo run ../

Finished dev [unoptimized + debuginfo] target(s) in 0.00s

Running target/debug/ls ../

./../ls

以下は例外になってるのでどうにかしたい

ファイルだった場合

$ cargo run src/main.rs

Finished dev [unoptimized + debuginfo] target(s) in 0.00s

Running target/debug/ls src/main.rs

thread 'main' panicked at 'called Result::unwrap() on an Err value: Os { code: 20, kind: Other, message: "Not a directory" }', src/libcore/result.rs:1084:5

note: run with RUST_BACKTRACE=1 environment variable to display a backtrace.

存在しないディレクトリ

$ cargo run noexist

Finished dev [unoptimized + debuginfo] target(s) in 0.00s

Running target/debug/ls noexist

thread 'main' panicked at 'called Result::unwrap() on an Err value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/libcore/result.rs:1084:5

note: run with RUST_BACKTRACE=1 environment variable to display a backtrace.

memo

のちほどメモするけど、例外を次はキャッチしてどうにかするみたいなものをやってみると良さそうかな。

Tweet