Em teoria, isso é possível usando LD_PRELOAD com o programa desejado.
Escreva uma biblioteca para adicionar um wrapper sobre chamadas de sistema "abertas" e use o programa original (digamos cat
) como LD_PRELOAD=/path/to/library cat
.
O código overridden_open () na biblioteca do wrapper seria semelhante ao seguinte código fictício.
/* This is an illustrative code, and doesn't follow any good coding practice. */
int overridden_open (...)
{
/* Only do this for the config file. */
if (strcmp (filename, "/path/to/required/config/file") == 0)
{
/* Download a fresh copy, and if successful, overwrite the existing file. */
if (system ("wget -O /path/to/required/config/file.tmp http://remote.file/url") == 0 && system ("<perform awk/sed/grep operations>") == 0)
{
system ("mv /path/to/required/config/file.tmp /path/to/required/config/file");
}
}
return open (...);
}