У меня есть программное обеспечение третьей стороны с внешней конфигурацией, которое принимает "путь к файлу" в качестве входного параметра. К сожалению, это программное обеспечение объединяет путь, указанный с каким-то предопределенным путем. Например, он ожидает «data /images» в качестве параметра и будет использовать «/Users /someuser /work /source /data /images». Я хочу указать и абсолютный путь, но если указать что-то вроде '/tmp /images' для этого программного обеспечения, то просто будет использоваться несуществующий путь /Users /someuser /work /source //tmp /images :(. Это какой-то трюк пути, который я могу использовать вместе с '..', чтобы я мог дать программам something
что приведет к абсолютному пути после того, как программное обеспечение объединит его с предопределенным. Использование '..' работает, но это не очень хорошее решение, так как конфигурация пути является статической и использование предопределенного пути может измениться.
2 ответа
Есть множество возможностей сделать так, чтобы /Users/someuser/work/source/XXX
указывало куда угодно в Linux:
Используйте символические ссылки - делая что-то вроде:
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 / что-то будет смонтировано прямо в каталоге, в который приложение будет писать.
Выполните "bind mount", то есть перепривязайте часть какой-либо другой файловой системы (уже смонтированной) к
XXX
:mount -o bind /wherever/you/want /Users/someuser/work/source/XXX
Он работает почти как символическая ссылка, но его гораздо сложнее обнаружить приложением. Приложение может легко проверить, является ли целевой каталог символической ссылкой, и отказаться от записи туда, в то время как метод bind mount предоставляет обычный каталог, но его содержимое
Используйте подобную unionfs файловую систему, такую как unionfs или aufs - таким образом, вы можете "объединить", то есть смонтировать одновременно несколько файловых систем в одном каталоге (то есть
XXX
)Поиграйте с трюками с LD_PRELOAD и библиотеками, которые переопределяют методы, такие как
open()
,fopen()
и т.д. - наиболее выдающимся из них является fuse , а именно, вы можете захотеть проверить файловые системы, подобные Union для FUSE .
Если вы используете символическую ссылку /Users/someuser/work/source/
to /
(root)
work$ ln -s / source
Каждый путь будет основан на корне:
/Users/someuser/work/source/tmp/images
будет указывать на
/tmp/images
который вы можете проверить по
work$ ls source/tmp/images