realpath.sh/realpath.sh

43 lines
583 B
Bash
Raw Normal View History

2018-03-14 00:26:12 +01:00
#!/bin/sh
2018-03-16 05:07:09 +01:00
case "$1" in
2018-03-16 05:10:20 +01:00
/*) left="${1#/}";;
*) left="${PWD#/}/$1";;
2018-03-16 05:07:09 +01:00
esac
2018-03-14 00:26:12 +01:00
2018-03-16 05:10:20 +01:00
result=""
2018-03-14 00:26:12 +01:00
2018-03-16 05:10:20 +01:00
while [ -n "$left" ]; do
case "$left" in
*/*)
2018-03-16 05:10:20 +01:00
seg="${left%%/*}"
left="${left#*/}"
;;
*)
2018-03-16 05:10:20 +01:00
seg="$left"
left=""
;;
esac
case "$seg" in
.)
2018-03-16 05:10:20 +01:00
result="${result%/*}"
continue
;;
..)
2018-03-16 05:10:20 +01:00
result="${result%/*/*}"
continue
;;
esac
2018-03-16 05:10:20 +01:00
result="$result/$seg"
target="$(readlink "$result")"
case "$target" in
2018-03-16 05:10:20 +01:00
/*) left="${target}"
result="";;
'') ;;
2018-03-16 05:10:20 +01:00
*) left="${left%/*}/${target}";;
esac
2018-03-16 05:10:20 +01:00
left="${left#/}"
done
2018-03-16 05:10:20 +01:00
echo "$result"