Как в 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
и продолжайте с минимальным количеством суеты.