Builtins, exec / eval: Builtins can return statuses now, not used at all now though
This commit is contained in:
parent
4cd90e368c
commit
7b0dec7084
17
src/fsh.nim
17
src/fsh.nim
|
@ -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})
|
||||||
|
|
Loading…
Reference in New Issue