Как сделать относительное абсолютным в Linux?

Как сделать относительное абсолютным в Linux?

У меня есть стороннее программное обеспечение с внешней конфигурацией, которое принимает «путь к файлу» в качестве входного параметра. К сожалению, это программное обеспечение объединяет заданный путь с некоторым предопределенным путем. Например, оно ожидает «data/images» в качестве параметра и будет использовать «/Users/someuser/work/source/data/images». Я хочу указать абсолютный путь, но указание чего-то вроде «/tmp/images» для этого программного обеспечения приведет к использованию несуществующего пути «/Users/someuser/work/source//tmp/images» :(. Это какой-то трюк с путем, который я могу использовать вместе с «..», чтобы я мог указать программное обеспечение, somethingкоторое приведет к абсолютному пути после того, как программное обеспечение объединит его с предопределенным. Использование «..» работает, но это не очень хорошее решение, поскольку конфигурация пути статична, а использование программного обеспечения предопределенного пути может измениться.

решение1

В Linux существует множество возможностей указать /Users/someuser/work/source/XXXкуда угодно:

  • Используйте символические ссылки — сделайте что-то вроде:

    ln -s /wherever/you/want /Users/someuser/work/source/XXX
    

    будет /Users/someuser/work/source/XXXвыглядеть как каталог. Если бы какое-то программное обеспечение переместилось туда и/или записало бы туда файлы, они бы оказались в /wherever/you/want.

  • Смонтируйте какую-нибудь другую файловую систему XXX, например

    mount /dev/something /Users/someuser/work/source/XXX
    

    Таким образом, вы смонтируете устройство /dev/something прямо в каталоге, в который приложение будет записывать данные.

  • Выполните «связывающее монтирование», т.е. повторно привяжите часть какой-либо другой файловой системы (уже смонтированной) к XXX:

    mount -o bind /wherever/you/want /Users/someuser/work/source/XXX
    

    Он работает во многом как символическая ссылка, но его гораздо сложнее обнаружить приложению. Приложение может легко проверить, является ли целевой каталог символической ссылкой, и отказаться писать туда, в то время как метод монтирования bind предоставляет обычный каталог, но его содержимое будет

  • Используйте файловую систему типа unionfs, напримерunionfsилиауфс- таким образом можно «унифицировать», т.е. одновременно монтировать несколько файловых систем в одном каталоге (т.е. XXX)

  • Поэкспериментируйте с LD_PRELOAD и библиотеками, которые переопределяют методы, такие как open(), fopen(), и т.д. - наиболее известный из них -предохранитель, а именно, вы можете захотеть проверитьФайловые системы типа Union для FUSE.

решение2

Если вы создаете символическую ссылку /Users/someuser/work/source/на /(корень)

work$ ln -s / source

Каждый путь будет основан на корне:

/Users/someuser/work/source/tmp/images 

будет указывать на

/tmp/images

который вы можете проверить

work$ ls source/tmp/images

Связанный контент