gpt4 book ai didi

rust - 如何干净地获取 bash 历史记录的路径?

转载 作者:行者123 更新时间:2023-11-29 08:30:24 24 4
gpt4 key购买 nike

所以,我不时研究 Rust,这次我有一个简单的任务来获取我的 bash 历史文件的路径。所以,你想出了 env::var() 和 env::home_dir() 并想加入它们。现在,它就像 Python 中的 1 或 2 行,可能在 C 中,我想出了这个可怕的 3 行:

let h_file = env::var("HISTFILE").unwrap_or(OsString::from_string(".bash_history".to_string())).into_string().unwrap_or_else(|_| { panic!("the end is near!!!")});
let h_dir = env::home_dir().unwrap_or_else(|| { panic!("unable to get homedir!") } );
let h_file_p = h_dir.join(h_file);

什么是更好的方法?老实说,作为一个初学者,我担心的是,仅仅使用文档,我就想到了这个可怕的东西。

编辑:当然重点是第一行那么长,而且我知道我可以将所有这些命令放在几行中,或者使用大量的匹配语句,所有这些都不会真正做到这一点一个很好的基本任务解决方案..

最佳答案

我认为你因为 std::old_pathstd::path 之间的转换而受苦,即 home_dir()< 的返回值。一旦它返回一个 std::path::PathBuf,它看起来像:

#![feature(os,env,path)]

use std::env;
use std::ffi::OsString;
use std::path::PathBuf;

fn future_home_dir() -> Option<PathBuf> {
Some(PathBuf::new("/home/user"))
}

fn main() {
let filename = env::var_os("HISTFILE").unwrap_or(OsString::from_str(".bash_history"));
let home_dir = future_home_dir().expect("could not determine a home directory");
let path = home_dir.join(&filename);

println!("{:?}", path);
}

这个的稳定版本是:

use std::env;
use std::ffi::OsString;

fn main() {
let filename = env::var_os("HISTFILE").unwrap_or_else(|| OsString::from(".bash_history"));
let home_dir = env::home_dir().expect("could not determine a home directory");
let path = home_dir.join(&filename);

println!("{:?}", path);
}

关于rust - 如何干净地获取 bash 历史记录的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28482876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com