mirror of
https://github.com/OpenMTC/OpenMTC.git
synced 2024-12-20 21:43:19 +00:00
60 lines
1.5 KiB
Bash
60 lines
1.5 KiB
Bash
|
#!/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)"
|
||
|
|