#!/bin/sh bin=$PWD/realpath.sh dir="$(mktemp -d)" cd "$dir" do_test() { name=$dir/$2 target=$3 case "$name" in */*) mkdir -p "${name%/*}";; esac if [ -n "$target" ]; then ln -sfn "$target" "$name" else touch "$name" fi is=$($bin "$name") should=$(readlink -f "$name") if [ "$is" == "$should" ]; then echo "Test $1 success" else echo "Test $1 fail: \"${bin##*/} $name\" returned \"$is\" instead of \"$should\"" stat "$name" fi rm -rf "$name" } touch t do_test 1 a /bin do_test 2 a/b . do_test 3 a/b .. do_test 4 a/b ../t do_test 5 a do_test 6 a/ /bin do_test 7 a/ rm -rf "$dir"