--:Minify:-- local name = syscall.getTask(syscall.getpid()).name local cloptions = { n = false, f = false, e = false, help = false } local args = {} for _, v in ipairs({ ... }) do if v:sub(1, 2) == "--" then local opt = v:sub(3) if cloptions[opt] == nil then print(name .. ": unrecognized option '" .. v .. "'") syscall.exit(1); return end cloptions[opt] = true elseif v:sub(1, 1) == "-" then for i = 2, #v do local opt = v:sub(i, i) if cloptions[opt] == nil then print(name .. ": invalid option '-" .. opt .. "'") syscall.exit(1); return end cloptions[opt] = true end else table.insert(args, v) end end if cloptions.help then print("Usage: " .. name .. " [OPTION]... FILE...") print("Print the resolved target of symbolic links.") print("") print("Options:") print(" -f canonicalize: follow every symlink; last component need not exist") print(" -e like -f but all components must exist") print(" -n do not output trailing newline") print(" --help display this help and exit") return end if #args == 0 then print(name .. ": missing operand") print("try '" .. name .. " --help' for more information.") syscall.exit(1); return end local function absPath(p) if p:sub(1,1) ~= "/" then local d = syscall.getcwd() if d:sub(-1) ~= "/" then d = d .. "/" end p = d .. p end return p end local anyErr = false for _, path in ipairs(args) do path = absPath(path) if cloptions.f or cloptions.e then local ok, stat = pcall(syscall.stat, path) if not ok then if cloptions.e then print(name .. ": " .. path .. ": " .. tostring(stat)) anyErr = true else if not cloptions.n then print(path) else printInline(path) end end else if not cloptions.n then print(path) else printInline(path) end end else local ok, target = pcall(syscall.readlink, path) if not ok then print(name .. ": " .. path .. ": " .. tostring(target)) anyErr = true else if not cloptions.n then print(target) else printInline(target) end end end end if anyErr then syscall.exit(1) end