Builtins, exec / eval: Builtins can return statuses now, not used at all now though

This commit is contained in:
Sekulum Forka 2021-05-14 18:57:44 +02:00
parent 4cd90e368c
commit 7b0dec7084
1 changed files with 9 additions and 8 deletions

View File

@ -242,13 +242,13 @@ proc parseCommand(cmd: string): seq[string] =
else: newitem.add(c) else: newitem.add(c)
# runBuiltin runs a shell builtin # runBuiltin runs a shell builtin
proc runBuiltin(builtin: string, args: openArray[string]): string = proc runBuiltin(builtin: string, args: openArray[string]): (string, int) =
case builtin: case builtin:
of "set": of "set":
if args.len < 2: if args.len < 2:
raise newShellCommandException("Not enough arguments provided", "set") raise newShellCommandException("Not enough arguments provided", "set")
shellVariables[args[0]] = args[1..^1].join(" ") shellVariables[args[0]] = args[1..^1].join(" ")
return "" return ("", 0)
of "setenv": of "setenv":
if args.len < 2: if args.len < 2:
raise newShellCommandException("Not enough arguments provided", "setenv") raise newShellCommandException("Not enough arguments provided", "setenv")
@ -257,11 +257,11 @@ proc runBuiltin(builtin: string, args: openArray[string]): string =
putEnv(args[0], args[1..^1].join(":")) putEnv(args[0], args[1..^1].join(":"))
except OSError as e: except OSError as e:
raise newShellCommandException(e.msg, "setenv") raise newShellCommandException(e.msg, "setenv")
return "" return ("", 0)
of "echo": of "echo":
if args[0] == "-n": if args[0] == "-n":
return args[1..^1].join(" ") return (args[1..^1].join(" "), 0)
return args.join(" ") & "\p" return (args.join(" ") & "\p", 0)
of "exit": of "exit":
if args.len == 0: if args.len == 0:
quit(0) quit(0)
@ -294,8 +294,9 @@ proc execute(cmd: string): int =
let progname = parsed[0] let progname = parsed[0]
let args = parsed[1..parsed.high] let args = parsed[1..parsed.high]
if progname in builtins: if progname in builtins:
stdout.write(runBuiltin(progname, args)) let res=runBuiltin(progname, args)
result = 0 stdout.write(res[0])
result=res[1]
continue continue
try: try:
let ps = startProcess(progname, args=args, options={poUsePath, poParentStreams}) let ps = startProcess(progname, args=args, options={poUsePath, poParentStreams})
@ -315,7 +316,7 @@ proc eval(cmd: string): string =
let progname=parsed[0] let progname=parsed[0]
let args = parsed[1..parsed.high] let args = parsed[1..parsed.high]
if progname in builtins: if progname in builtins:
result = runBuiltin(progname, args) result = runBuiltin(progname, args)[0]
continue continue
try: try:
let ps = startProcess(progname, args=args, options={poUsePath}) let ps = startProcess(progname, args=args, options={poUsePath})