mirror of
https://github.com/OpenMTC/OpenMTC.git
synced 2024-12-30 01:39:06 +00:00
60 lines
1.5 KiB
Bash
Executable File
60 lines
1.5 KiB
Bash
Executable File
#!/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)"
|
|
|