local shell=require("shell") local args,options=shell.parse(...) local ec,error_prefix=0,"alias:" if options.help then print(string.format("Usage: alias: [name[=value] ... ]")) return end local function validAliasName(k) return k:match("[/%$`=|&;%(%)<> \t]")==nil end local function setAlias(k,v) if not validAliasName(k)then io.stderr:write(string.format("%s `%s': invalid alias name\n",error_prefix,k)) else shell.setAlias(k,v) end end local function printAlias(k) local v=shell.getAlias(k) if not v then io.stderr:write(string.format("%s %s: not found\n",error_prefix,k)) ec=1 else io.write(string.format("alias %s='%s'\n",k,v)) end end local function splitPair(arg) local matchBegin,matchEnd=arg:find("=") if matchBegin==nil or matchBegin==1 then return arg else return arg:sub(1,matchBegin-1),arg:sub(matchEnd+1) end end local function handlePair(k,v) if v then return setAlias(k,v) else return printAlias(k) end end if not next(args)then for k,v in shell.aliases()do print(string.format("alias %s='%s'",k,v)) end else for _,v in ipairs(args)do checkArg(1,v,"string") handlePair(splitPair(v)) end end return ec