local args = { ... } local modtimes = {} if #args == 0 then print("usage: runonchange [files to watch ...] -- program [args...]") return end while #args > 0 do local name = table.remove(args, 1) if name == "--" then break end modtimes[name] = -1 end if #args == 0 then printError("No executable was given") return end while true do local shall_run = false for name, modtime in pairs(modtimes) do local modtime_new = fs.attributes(name).modified if modtime_new ~= modtime then shall_run = true modtimes[name] = modtime_new print(name .. " was modified") end end if shall_run then local succ, err = pcall(shell.run, table.unpack(args)) if succ then print("Process finished successfully") else printError("Process crashed: " .. err) end end os.sleep(0.5) end