OpenMTC/util/shell-utils.sh

60 lines
1.5 KiB
Bash
Raw Permalink Normal View History

2017-11-07 13:41:38 +00:00
#!/usr/bin/env bash
#set -x
# A (partial) 'realpath' replacement based on Bash functionality,
# using 'readlink' in a bare form (should be compatible with non-GNU
# 'readlink).
#
# For the original idea, see:
# http://stackoverflow.com/questions/3572030/bash-script-absolute-path-with-osx#30267480
#
get_realpath()
{
local _READLINK="$(readlink "$1")"
if [ -z ${_READLINK} ]; then
echo "$1"
return
else
# Note, a symbolic link could be either a link to a file or a
# link to a path!
# If is symbolic link to directory
if [ -d ${_READLINK} ]; then
pushd ${_READLINK}
echo "${PWD}"
popd
return
# If is symbolic link to a file
else
# Save depth of 'dirs' to be able to jump back were you
# came from
local _DIRSDEPTH=$(dirs | wc -l)
local _LASTBASENAME=$(basename ${_READLINK})
pushd $(dirname $1) >/dev/null
_READLINK=$(readlink $(basename "$1"))
while [ -n "${_READLINK}" ]; do
pushd $(dirname "${_READLINK}" ) >/dev/null
_READLINK=$(readlink $(basename "${_READLINK}"))
done
_REALPATH=${PWD}/$(basename "${_LASTBASENAME}")
fi
fi
# Get back to where you originally came from
while [ "${_DIRSDEPTH}" != "$(dirs | wc -l)" ]; do
popd
done
echo "${_REALPATH}"
}
# echo ""
# echo "checking: $1"
# echo "get_realpath(): $(get_realpath $1)"
# echo "realpath: $(realpath $1)"