function cleanpath { local var="${1:-PATH}" oldpath newpath=: entry oldpath="${!var}:" while [ -n "$oldpath" ]; do entry="${oldpath%%:*}" oldpath="${oldpath#*:}" case "$entry" in /*) case "$newpath" in *:"$entry":*) ;; *) [ -d "$entry" ] && newpath="$newpath$entry:";; esac;; esac done newpath="${newpath#:}" eval "$var"'="${newpath%:}"' } PATH=/home/stieltjes/rodgers/bin:/home/stieltjes/.rodgers-pub/bin:/home/stieltjes/.rodgers-pub/bin/wineexecbin/bin:$PATH; cleanpath PATH;