From 5ebbc60ccbf1f40501fe89bcf7cf8a7bd1f2c9f9 Mon Sep 17 00:00:00 2001 From: Sekulum Forka Date: Wed, 12 May 2021 15:43:40 +0200 Subject: [PATCH] Builtins: Added the exit builtin --- src/fsh.nim | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/fsh.nim b/src/fsh.nim index 417cd32..d471449 100644 --- a/src/fsh.nim +++ b/src/fsh.nim @@ -18,10 +18,11 @@ for k, v in envPairs(): envVariables[k]=v # list of builtin commands -let builtins: array[3, string] = [ +let builtins: array[4, string] = [ "set", "setenv", "echo", +"exit", ] # forward declarations @@ -214,6 +215,25 @@ proc runBuiltin(builtin: string, args: openArray[string]): string = if args[0] == "-n": return args[1..^1].join(" ") return args.join(" ") & "\p" + of "exit": + if args.len == 0: + quit(0) + elif args.len == 1: + try: + quit(args[0].parseInt) + except ValueError: + quit(0) + else: + try: + let exitcode=args[0].parseInt + if exitcode > 0: + stderr.write(args[1..^1].join(" "), "\p") + else: + stdout.write(args[1..^1].join(" "), "\p") + quit(exitcode) + except ValueError: + stdout.write(args.join(" "), "\p") + quit(0) else: raise newException(Exception, "Fsh: No such builtin implemented")