Вы можете создать оболочку для вызовов библиотеки времени выполнения C (glibc) и передать ее в свой скрипт с помощью LD_PRELOAD
(см. этот вопрос для получения дополнительной информации).
Существует не так много функций, которые вы должны переопределить, LSB определяет только 16 связанных со временем функций в glibc. Реализация ваших оболочек может использовать значение переменной окружения для настройки перекоса. Тогда вызов будет выглядеть так:
LD_PRELOAD=libtime.so TIME_SHIFT=+10 my_program
И реализация будет выглядеть так (псевдокод):
struct tm *localtime(const time_t *timep)
{
//use dlopen() call to get the actual glibc
//use dlsym() to find the real localtime() function
//call this localtime function
//adjust the time in the struct tm* returned by TIME_SHIFT value
//return it to the calling program
}
Спасибо Константину Власову за подсказку. Но, конечно, идея не нова. Этот ответ StackOverflow от Hasturkun перечисляет несколько библиотек, которые работают таким образом.