From 7b0dec70842f2acd95d71b544cc02defdf01c2f3 Mon Sep 17 00:00:00 2001 From: Sekulum Forka Date: Fri, 14 May 2021 18:57:44 +0200 Subject: [PATCH] Builtins, exec / eval: Builtins can return statuses now, not used at all now though --- src/fsh.nim | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/fsh.nim b/src/fsh.nim index fce2a12..0746d1b 100644 --- a/src/fsh.nim +++ b/src/fsh.nim @@ -242,13 +242,13 @@ proc parseCommand(cmd: string): seq[string] = else: newitem.add(c) # runBuiltin runs a shell builtin -proc runBuiltin(builtin: string, args: openArray[string]): string = +proc runBuiltin(builtin: string, args: openArray[string]): (string, int) = case builtin: of "set": if args.len < 2: raise newShellCommandException("Not enough arguments provided", "set") shellVariables[args[0]] = args[1..^1].join(" ") - return "" + return ("", 0) of "setenv": if args.len < 2: 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(":")) except OSError as e: raise newShellCommandException(e.msg, "setenv") - return "" + return ("", 0) of "echo": if args[0] == "-n": - return args[1..^1].join(" ") - return args.join(" ") & "\p" + return (args[1..^1].join(" "), 0) + return (args.join(" ") & "\p", 0) of "exit": if args.len == 0: quit(0) @@ -294,8 +294,9 @@ proc execute(cmd: string): int = let progname = parsed[0] let args = parsed[1..parsed.high] if progname in builtins: - stdout.write(runBuiltin(progname, args)) - result = 0 + let res=runBuiltin(progname, args) + stdout.write(res[0]) + result=res[1] continue try: let ps = startProcess(progname, args=args, options={poUsePath, poParentStreams}) @@ -315,7 +316,7 @@ proc eval(cmd: string): string = let progname=parsed[0] let args = parsed[1..parsed.high] if progname in builtins: - result = runBuiltin(progname, args) + result = runBuiltin(progname, args)[0] continue try: let ps = startProcess(progname, args=args, options={poUsePath})