Следующая функция проверяет, существует ли символическая ссылка и cd в ее родительский каталог. Конечно, это также работает с обычными файлами. Это может быть умнее с ошибками readlink или cd , но это только начало.
GNU/Linux:
В GNU/Linux вы можете использовать readlink -f:
cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink -f "$1")")" || echo "No such file: $1" }
BSD / OS X:
Следующее должно работать на Unix / OS X, где нет опции -f для readlink . Конечно, это означает, что он не будет следовать вложенным символическим ссылкам.
cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink "$1")")" || echo "No such file: $1" }
В OS X вы можете установить coreutils с Homebrew и использовать вместо него greadlink -f .