mirror of
https://github.com/NeoFlock/neonucleus.git
synced 2025-09-25 01:23:31 +02:00
61 lines
1.5 KiB
Lua
61 lines
1.5 KiB
Lua
local shell = require("shell")
|
|
local args, options = shell.parse(...)
|
|
|
|
if options.help then
|
|
print([[Usage: sleep NUMBER[SUFFIX]...
|
|
Pause for NUMBER seconds. SUFFIX may be 's' for seconds (the default),
|
|
'm' for minutes, 'h' for hours or 'd' for days. Unlike most implementations
|
|
that require NUMBER be an integer, here NUMBER may be an arbitrary floating
|
|
point number. Given two or more arguments, pause for the amount of time
|
|
specified by the sum of their values.]])
|
|
end
|
|
|
|
local function help(bad_arg)
|
|
print("sleep: invalid option -- '"..tostring(bad_arg).."'")
|
|
print("Try 'sleep --help' for more information.")
|
|
end
|
|
|
|
local function time_type_multiplier(time_type)
|
|
if not time_type or #time_type == 0 or time_type == 's' then
|
|
return 1
|
|
elseif time_type == 'm' then
|
|
return 60
|
|
elseif time_type == 'h' then
|
|
return 60 * 60
|
|
elseif time_type == 'd' then
|
|
return 60 * 60 * 24
|
|
end
|
|
|
|
-- weird error, my bad
|
|
assert(false,'bug parsing parameter:'..tostring(time_type))
|
|
end
|
|
|
|
options.help = nil
|
|
if next(options) then
|
|
help(next(options))
|
|
return 1
|
|
end
|
|
|
|
local total_time = 0
|
|
|
|
for _,v in ipairs(args) do
|
|
local interval, time_type = v:match('^([%d%.]+)([smhd]?)$')
|
|
interval = tonumber(interval)
|
|
|
|
if not interval or interval < 0 then
|
|
help(v)
|
|
return 1
|
|
end
|
|
|
|
total_time = total_time + time_type_multiplier(time_type) * interval
|
|
end
|
|
|
|
local ins = io.stdin.stream
|
|
local pull = ins.pull
|
|
local start = 1
|
|
if not pull then
|
|
pull = require("event").pull
|
|
start = 2
|
|
end
|
|
pull(select(start, ins, total_time, "interrupted"))
|