Builtins: Added the exit builtin
This commit is contained in:
parent
23592c5e15
commit
5ebbc60ccb
22
src/fsh.nim
22
src/fsh.nim
|
@ -18,10 +18,11 @@ for k, v in envPairs():
|
||||||
envVariables[k]=v
|
envVariables[k]=v
|
||||||
|
|
||||||
# list of builtin commands
|
# list of builtin commands
|
||||||
let builtins: array[3, string] = [
|
let builtins: array[4, string] = [
|
||||||
"set",
|
"set",
|
||||||
"setenv",
|
"setenv",
|
||||||
"echo",
|
"echo",
|
||||||
|
"exit",
|
||||||
]
|
]
|
||||||
|
|
||||||
# forward declarations
|
# forward declarations
|
||||||
|
@ -214,6 +215,25 @@ proc runBuiltin(builtin: string, args: openArray[string]): string =
|
||||||
if args[0] == "-n":
|
if args[0] == "-n":
|
||||||
return args[1..^1].join(" ")
|
return args[1..^1].join(" ")
|
||||||
return args.join(" ") & "\p"
|
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:
|
else:
|
||||||
raise newException(Exception, "Fsh: No such builtin implemented")
|
raise newException(Exception, "Fsh: No such builtin implemented")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue