Builtins: Added the exit builtin

This commit is contained in:
Sekulum Forka 2021-05-12 15:43:40 +02:00
parent 23592c5e15
commit 5ebbc60ccb
1 changed files with 21 additions and 1 deletions

View File

@ -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")