Следующая функция проверяет, существует ли символическая ссылка и 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
.