Основываясь на связи с комментатором, я согласился, что это очень сложно и не имеет тривиального способа реализовать realpath, который ведет себя точно так же, как Ubuntu.
Но следующая версия, может обрабатывать угловые случаи, лучший ответ не может и удовлетворить мои ежедневные потребности в MacBook. Поместите этот код в ваш ~ / .bashrc и запомните:
- arg может быть только 1 файлом или директорией, без подстановочных знаков
- без пробелов в директории или имени файла
- по крайней мере, файл или родительский каталог dir существует
- не стесняйтесь использовать. .. / вещь, это безопасно
# 1. if is a dir, try cd and pwd
# 2. if is a file, try cd its parent and concat dir+file
realpath() {
[ "$1" = "" ] && return 1
dir=`dirname "$1"`
file=`basename "$1"`
last=`pwd`
[ -d "$dir" ] && cd $dir || return 1
if [ -d "$file" ];
then
# case 1
cd $file && pwd || return 1
else
# case 2
echo `pwd`/$file | sed 's/\/\//\//g'
fi
cd $last
}