Eu tenho um software de terceiros com configuração externa que usa "caminho para arquivo" como parâmetro de entrada. Infelizmente, este software concatena o caminho fornecido com algum caminho predefinido. Por exemplo, ele espera 'data/images' como parâmetro e usará '/Users/someuser/work/source/data/images'. Quero especificar um caminho absoluto, mas fornecer algo como '/tmp/images' para este software resultará apenas no caminho inexistente '/Users/someuser/work/source//tmp/images' sendo usado :(. É algum truque de caminho que posso usar junto com '..' para poder fornecer um software something
que resultará em um caminho absoluto depois que o software o concatena com um predefinido. Usar '..' funciona, mas não é uma solução muito boa, pois a configuração do caminho é estática e predefinida. o caminho de uso do software pode mudar.
Responder1
Existem inúmeras possibilidades de /Users/someuser/work/source/XXX
apontar para onde você quiser no Linux:
Use links simbólicos - fazendo algo como:
ln -s /wherever/you/want /Users/someuser/work/source/XXX
faria
/Users/someuser/work/source/XXX
aparecer como um diretório. Se algum software viajasse para lá e/ou gravasse arquivos lá, eles acabariam no formato/wherever/you/want
.Monte algum outro sistema de arquivos
XXX
, ou sejamount /dev/something /Users/someuser/work/source/XXX
Dessa forma, você terá seu dispositivo /dev/something montado diretamente no diretório no qual o aplicativo gravaria.
Faça uma "montagem de ligação", ou seja, religue uma parte de algum outro sistema de arquivos (já montado) para
XXX
:mount -o bind /wherever/you/want /Users/someuser/work/source/XXX
Funciona como um link simbólico, mas é muito mais difícil de detectar pelo aplicativo. O aplicativo pode facilmente verificar se o diretório de destino é um link simbólico e recusar a gravação nele, enquanto o método bind mount fornece um diretório normal, mas seu conteúdo seria
Use um sistema de arquivos semelhante ao unionfs, comosindicatoouaufs- desta forma você pode "unificar", ou seja, montar simultaneamente vários sistemas de arquivos em um diretório (ou seja,
XXX
)Faça alguns truques com LD_PRELOAD e bibliotecas que substituem métodos, como
open()
,fopen()
, etc - o mais proeminente éfusível, ou seja, você pode querer verificarSistemas de arquivos tipo Union para FUSE.
Responder2
Se você criar um link simbólico /Users/someuser/work/source/
para /
(root)
work$ ln -s / source
Cada caminho será baseado na raiz:
/Users/someuser/work/source/tmp/images
apontará para
/tmp/images
que você pode verificar por
work$ ls source/tmp/images