Назад | Перейти на главную страницу

Разыменовать символическую ссылку в OS X?

Как в OS X разыменовать символическую ссылку на каноническое имя файла? (т.е. тот, который начинается с /.)

То есть мне нужен эквивалент GNU readlink -f вариант:

kapow:~$ greadlink -f .bash_profile
/Users/mjs/.config/home/.bash_profile

OS X readlink вместо этого возвращает относительную ссылку:

kapow:~$ readlink .bash_profile
.config/home/.bash_profile

stat(1) действительно есть удивительное количество вариантов, но я не мог придумать правильную комбинацию, чтобы делать то, что я хочу.

Самое простое решение - проверить возвращаемое значение и добавить pwd если вы обнаружите, что ссылка для чтения вернула относительный путь, а не абсолютный путь, хранящийся в ссылке. Все, что не начинается с /, легко протестировать с помощью различных инструментов unix.


Я не знаю, было ли это осознанным дизайнерским решением, поскольку OS X предпочитает псевдонимы файловой системы, которые отслеживают уникальный идентификатор файла, а также путь, или это просто упущение / отличие от BSD. Ясно то, что нет возможности синтезировать полный путь к связанному файлу с использованием версии readlink для OS X.

Вот несколько готовых решений для реализации read link -f на OS X с другого сайта ...

Если вы поклонник инструментов GNU, вам захочется получить домашнее пиво и установите пакет coreutils - затем вы можете использовать псевдоним greadlink для readlink и продолжайте с минимальным количеством суеты.