mirror of
https://github.com/NeoFlock/neonucleus.git
synced 2025-09-24 09:03:32 +02:00
71 lines
1.6 KiB
Lua
71 lines
1.6 KiB
Lua
local fs = require("filesystem")
|
|
local shell = require("shell")
|
|
local sh = require("sh")
|
|
|
|
local touch = loadfile(shell.resolve("touch", "lua"))
|
|
local mkdir = loadfile(shell.resolve("mkdir", "lua"))
|
|
|
|
if not touch then
|
|
local errorMessage = "missing tools for mktmp"
|
|
io.stderr:write(errorMessage .. '\n')
|
|
return false, errorMessage
|
|
end
|
|
|
|
local args, ops = shell.parse(...)
|
|
|
|
local function pop(...)
|
|
local result
|
|
for _,key in ipairs({...}) do
|
|
result = ops[key] or result
|
|
ops[key] = nil
|
|
end
|
|
return result
|
|
end
|
|
|
|
local directory = pop('d')
|
|
local verbose = pop('v', 'verbose')
|
|
local quiet = pop('q', 'quiet')
|
|
|
|
if pop('help') or #args > 1 or next(ops) then
|
|
print([[Usage: mktmp [OPTION] [PATH]
|
|
Create a new file with a random name in $TMPDIR or PATH argument if given
|
|
-d create a directory instead of a file
|
|
-v, --verbose print result to stdout, even if no tty
|
|
-q, --quiet do not print results to stdout, even if tty (verbose overrides)
|
|
--help print this help message]])
|
|
if next(ops) then
|
|
io.stderr:write("invalid option: " .. (next(ops)) .. '\n')
|
|
return 1
|
|
end
|
|
return
|
|
end
|
|
|
|
if not verbose then
|
|
if not quiet then
|
|
if io.stdout.tty then
|
|
verbose = true
|
|
end
|
|
end
|
|
end
|
|
|
|
local prefix = args[1] or os.getenv("TMPDIR") .. '/'
|
|
if not fs.exists(prefix) then
|
|
io.stderr:write(
|
|
string.format(
|
|
"cannot create tmp file or directory at %s, it does not exist\n",
|
|
prefix))
|
|
return 1
|
|
end
|
|
|
|
local tmp = os.tmpname()
|
|
local ok, reason = (directory and mkdir or touch)(tmp)
|
|
|
|
if sh.internal.command_passed(ok) then
|
|
if verbose then
|
|
print(tmp)
|
|
end
|
|
return tmp
|
|
end
|
|
|
|
return ok, reason
|