local shell = require("shell") local fs = require("filesystem") local args, ops = shell.parse(...) local path = nil local verbose = false if ops.help then print( [[Usage cd [dir] For more options, run: man cd]]) return end if #args == 0 then local home = os.getenv("HOME") if not home then io.stderr:write("cd: HOME not set\n") return 1 end path = home elseif args[1] == '-' then verbose = true local oldpwd = os.getenv("OLDPWD"); if not oldpwd then io.stderr:write("cd: OLDPWD not set\n") return 1 end path = oldpwd else path = args[1] end local resolved = shell.resolve(path) if not fs.exists(resolved) then io.stderr:write("cd: ",path,": No such file or directory\n") return 1 end path = resolved local oldpwd = shell.getWorkingDirectory() local result, reason = shell.setWorkingDirectory(path) if not result then io.stderr:write("cd: ", path, ": ", reason) return 1 else os.setenv("OLDPWD", oldpwd) end if verbose then os.execute("pwd") end