想象一下,我有一条不存在的路径:
$ ls /foo/bar/baz/hello/world
ls: cannot access /foo/bar/baz/hello/world: No such file or directory
但是,可以说/foo/bar
确实存在。有没有一种快速的方法可以让我确定baz
路径的起点?
我正在使用Bash。
给定一个规范的路径名(例如您的路径名),它将起作用:
set -f --; IFS=/
for p in $pathname
do [ -e "$*/$p" ] || break
set -- "$@" "$p"
done; printf %s\\n "$*"
$pathname
它将打印出的最后一个完全存在/可访问的组件,并将每个组件分别放入arg数组。不打印第一个不存在的组件,但将其保存在中$p
。
您可能采取相反的方法:
until cd -- "$path" && cd -
do case $path in
(*[!/]/*)
path="${path%/*}"
;; (*) ! break
esac
done 2>/dev/null && cd -
那将要么适当地返回,要么将$path
根据需要减少。它拒绝尝试更改为/
,但是如果成功,则将同时打印当前的工作目录和将其更改为stdout的目录。您的电流$PWD
也将被放入$OLDPWD
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句