Как создать команду (или псевдоним) для перехода в каталог, содержащий целевой файл симлинка. Например, если у меня есть симлинк
symFile@ -> /Users/zhermes/some/dir/someFile
Я бы хотел иметь возможность бегать <command> symFile
и иметь это cd
для себя/Users/zhermes/some/dir/
решение1
Следующая функция проверяет, существует ли символическая ссылка и cd
s в ее родительский каталог. Конечно, она также работает с обычными файлами. Она могла бы быть более умной с ошибками от 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
с помощьюДомашнее пивои используйте greadlink -f
вместо этого.