realpath.sh/realpath.sh

40 lines
452 B
Bash
Raw Normal View History

2018-03-14 00:26:12 +01:00
#!/bin/sh
2018-03-14 00:53:30 +01:00
p="${1%/}"
p="${p#/}"
2018-03-14 00:26:12 +01:00
r=""
2018-03-14 00:26:12 +01:00
while [ -n "$p" ]; do
case "$p" in
*/*)
seg="${p%%/*}"
p="${p#*/}"
;;
*)
seg="$p"
p=""
;;
esac
case "$seg" in
.)
r="${r%/*}"
continue
;;
..)
r="${r%/*/*}"
continue
;;
esac
r="$r/$seg"
target="$(readlink "$r")"
case "$target" in
/*) p="${target}"
r="";;
'') ;;
*) p="${p%/*}/${target}";;
esac
p="${p#/}"
done
echo "$r"