forgot to commit openos
This commit is contained in:
60
data/openos/bin/sleep.lua
Normal file
60
data/openos/bin/sleep.lua
Normal file
@@ -0,0 +1,60 @@
|
||||
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"))
|
||||
Reference in New Issue
Block a user