Попробуйте наш новый продукт библиотеки Bash realpath-lib , который мы поместили на GitHub для бесплатного и свободного использования. Он тщательно задокументирован и является отличным инструментом обучения.
Разрешает локальные, относительные и абсолютные пути и не имеет никаких зависимостей, кроме Bash 4+; так что должно работать где угодно. Это бесплатно, чисто, просто и поучительно.
Вы можете сделать:
get_realpath <absolute|relative|symlink|local file path>
Эта функция является ядром библиотеки:
function get_realpath() {
if [[ -f "$1" ]]
then
# file *must* exist
if cd "$(echo "${1%/*}")" &>/dev/null
then
# file *may* not be local
# exception is ./file.ext
# try 'cd .; cd -;' *works!*
local tmppwd="$PWD"
cd - &>/dev/null
else
# file *must* be local
local tmppwd="$PWD"
fi
else
# file *cannot* exist
return 1 # failure
fi
# reassemble realpath
echo "$tmppwd"/"${1##*/}"
return 0 # success
}
Он также содержит функции для get_dirname, get_filename, get_ stemname и validate_path. Попробуйте на разных платформах и помогите улучшить его.