Add commentary, fix broken relative symlink resolution
This commit is contained in:
parent
4e0af9dc0a
commit
c089ff4a3a
16
realpath.sh
16
realpath.sh
@ -14,37 +14,49 @@ result=""
|
||||
while [ -n "$left" ]; do
|
||||
case "$left" in
|
||||
*/*)
|
||||
# Snip one path segment off $left
|
||||
seg="${left%%/*}"
|
||||
left="${left#*/}"
|
||||
;;
|
||||
*)
|
||||
# Last path segment already
|
||||
seg="$left"
|
||||
left=""
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$seg" in
|
||||
.)
|
||||
# /foo/a -> . will become /foo
|
||||
result="${result%/*}"
|
||||
continue
|
||||
;;
|
||||
..)
|
||||
# /foo/bar/a -> .. will become /foo
|
||||
result="${result%/*/*}"
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
result="$result/$seg"
|
||||
target="$(readlink "$result")"
|
||||
|
||||
case "$target" in
|
||||
/*)
|
||||
left="${target}"
|
||||
# Absolute symlink. Resets buildup of $result
|
||||
left="${target}/${left}"
|
||||
result=""
|
||||
;;
|
||||
'')
|
||||
# Readlink failed, its not a symlink
|
||||
;;
|
||||
*)
|
||||
left="${left%/*}/${target}"
|
||||
# Relative symlink: Keep $result, its the symlink base
|
||||
left="${target}/${left}"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Make sure $left never starts with a slash
|
||||
left="${left#/}"
|
||||
done
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user