mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-31 13:07:46 +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"
|
version = "0.0.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getopts 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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",
|
"libstdbuf 0.0.1",
|
||||||
"tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"uucore 0.0.1",
|
"uucore 0.0.1",
|
||||||
|
@ -1569,6 +1570,114 @@ dependencies = [
|
||||||
"yes 0.0.1",
|
"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]]
|
[[package]]
|
||||||
name = "vec_map"
|
name = "vec_map"
|
||||||
version = "0.8.0"
|
version = "0.8.0"
|
||||||
|
|
|
@ -15,15 +15,28 @@ extern crate getopts;
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
use std::io;
|
||||||
|
|
||||||
static NAME: &'static str = "pwd";
|
static NAME: &'static str = "pwd";
|
||||||
static VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
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 {
|
pub fn uumain(args: Vec<String>) -> i32 {
|
||||||
let mut opts = getopts::Options::new();
|
let mut opts = getopts::Options::new();
|
||||||
|
|
||||||
opts.optflag("", "help", "display this help and exit");
|
opts.optflag("", "help", "display this help and exit");
|
||||||
opts.optflag("", "version", "output version information 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..]) {
|
let matches = match opts.parse(&args[1..]) {
|
||||||
Ok(m) => m,
|
Ok(m) => m,
|
||||||
|
@ -43,7 +56,19 @@ Print the full filename of the current working directory.", NAME, VERSION);
|
||||||
} else if matches.opt_present("version") {
|
} else if matches.opt_present("version") {
|
||||||
println!("{} {}", NAME, VERSION);
|
println!("{} {}", NAME, VERSION);
|
||||||
} else {
|
} 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
|
0
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue