mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-29 20:17:45 +00:00
Merge pull request #1074 from Heather/pwd_lp
pwd: add support for -L and -P options
This commit is contained in:
commit
3eee1b9ad6
2 changed files with 135 additions and 1 deletions
109
Cargo.lock
generated
109
Cargo.lock
generated
|
@ -1153,6 +1153,7 @@ name = "stdbuf"
|
|||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"getopts 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libstdbuf 0.0.1",
|
||||
"tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"uucore 0.0.1",
|
||||
|
@ -1569,6 +1570,114 @@ dependencies = [
|
|||
"yes 0.0.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uutils"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"arch 0.0.1",
|
||||
"base32 0.0.1",
|
||||
"base64 0.0.1",
|
||||
"basename 0.0.1",
|
||||
"cat 0.0.1",
|
||||
"chgrp 0.0.1",
|
||||
"chmod 0.0.1",
|
||||
"chown 0.0.1",
|
||||
"chroot 0.0.1",
|
||||
"cksum 0.0.1",
|
||||
"comm 0.0.1",
|
||||
"cp 0.0.1",
|
||||
"cut 0.0.1",
|
||||
"date 0.0.1",
|
||||
"dircolors 0.0.1",
|
||||
"dirname 0.0.1",
|
||||
"du 0.0.1",
|
||||
"echo 0.0.1",
|
||||
"env 0.0.1",
|
||||
"expand 0.0.1",
|
||||
"expr 0.0.1",
|
||||
"factor 0.0.1",
|
||||
"false 0.0.1",
|
||||
"filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fmt 0.0.1",
|
||||
"fold 0.0.1",
|
||||
"groups 0.0.1",
|
||||
"hashsum 0.0.1",
|
||||
"head 0.0.1",
|
||||
"hostid 0.0.1",
|
||||
"hostname 0.0.1",
|
||||
"id 0.0.1",
|
||||
"install 0.0.1",
|
||||
"kill 0.0.1",
|
||||
"lazy_static 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"link 0.0.1",
|
||||
"ln 0.0.1",
|
||||
"logname 0.0.1",
|
||||
"ls 0.0.1",
|
||||
"mkdir 0.0.1",
|
||||
"mkfifo 0.0.1",
|
||||
"mknod 0.0.1",
|
||||
"mktemp 0.0.1",
|
||||
"more 0.0.1",
|
||||
"mv 0.0.1",
|
||||
"nice 0.0.1",
|
||||
"nl 0.0.1",
|
||||
"nohup 0.0.1",
|
||||
"nproc 0.0.1",
|
||||
"numfmt 0.0.1",
|
||||
"od 0.0.1",
|
||||
"paste 0.0.1",
|
||||
"pathchk 0.0.1",
|
||||
"pinky 0.0.1",
|
||||
"printenv 0.0.1",
|
||||
"printf 0.0.1",
|
||||
"ptx 0.0.1",
|
||||
"pwd 0.0.1",
|
||||
"rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"readlink 0.0.1",
|
||||
"realpath 0.0.1",
|
||||
"regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"relpath 0.0.1",
|
||||
"rm 0.0.1",
|
||||
"rmdir 0.0.1",
|
||||
"seq 0.0.1",
|
||||
"shred 0.0.1",
|
||||
"shuf 0.0.1",
|
||||
"sleep 0.0.1",
|
||||
"sort 0.0.1",
|
||||
"split 0.0.1",
|
||||
"stat 0.0.1",
|
||||
"stdbuf 0.0.1",
|
||||
"sum 0.0.1",
|
||||
"sync 0.0.1",
|
||||
"tac 0.0.1",
|
||||
"tail 0.0.1",
|
||||
"tee 0.0.1",
|
||||
"tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"test 0.0.1",
|
||||
"time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"timeout 0.0.1",
|
||||
"touch 0.0.1",
|
||||
"tr 0.0.1",
|
||||
"true 0.0.1",
|
||||
"truncate 0.0.1",
|
||||
"tsort 0.0.1",
|
||||
"tty 0.0.1",
|
||||
"uname 0.0.1",
|
||||
"unexpand 0.0.1",
|
||||
"unindent 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"uniq 0.0.1",
|
||||
"unix_socket 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unlink 0.0.1",
|
||||
"uptime 0.0.1",
|
||||
"users 0.0.1",
|
||||
"uucore 0.0.1",
|
||||
"wc 0.0.1",
|
||||
"who 0.0.1",
|
||||
"whoami 0.0.1",
|
||||
"yes 0.0.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vec_map"
|
||||
version = "0.8.0"
|
||||
|
|
|
@ -15,15 +15,28 @@ extern crate getopts;
|
|||
extern crate uucore;
|
||||
|
||||
use std::env;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::io;
|
||||
|
||||
static NAME: &'static str = "pwd";
|
||||
static VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
||||
|
||||
pub fn absolute_path(path: &Path) -> io::Result<PathBuf> {
|
||||
let path_buf = path.canonicalize()?;
|
||||
|
||||
#[cfg(windows)]
|
||||
let path_buf = Path::new(path_buf.as_path().to_string_lossy().trim_left_matches(r"\\?\")).to_path_buf();
|
||||
|
||||
Ok(path_buf)
|
||||
}
|
||||
|
||||
pub fn uumain(args: Vec<String>) -> i32 {
|
||||
let mut opts = getopts::Options::new();
|
||||
|
||||
opts.optflag("", "help", "display this help and exit");
|
||||
opts.optflag("", "version", "output version information and exit");
|
||||
opts.optflag("L", "logical", "use PWD from environment, even if it contains symlinks");
|
||||
opts.optflag("P", "physical", "avoid all symlinks");
|
||||
|
||||
let matches = match opts.parse(&args[1..]) {
|
||||
Ok(m) => m,
|
||||
|
@ -43,7 +56,19 @@ Print the full filename of the current working directory.", NAME, VERSION);
|
|||
} else if matches.opt_present("version") {
|
||||
println!("{} {}", NAME, VERSION);
|
||||
} else {
|
||||
println!("{}", env::current_dir().unwrap().display());
|
||||
match env::current_dir() {
|
||||
Ok(logical_path) => {
|
||||
if matches.opt_present("logical") {
|
||||
println!("{}", logical_path.display());
|
||||
} else {
|
||||
match absolute_path(&logical_path) {
|
||||
Ok(physical_path) => println!("{}", physical_path.display()),
|
||||
Err(e) => crash!(1, "failed to get absolute path {}", e)
|
||||
};
|
||||
}
|
||||
},
|
||||
Err(e) => crash!(1, "failed to get current directory {}", e)
|
||||
};
|
||||
}
|
||||
|
||||
0
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue