function calls no longer return number tokens (cleaner output), added ? command to get return code
This commit is contained in:
parent
ffef8a96e7
commit
f1cc9b7f8c
2 changed files with 22 additions and 8 deletions
|
|
@ -29,6 +29,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var bgProcs = make([]*exec.Cmd, 0)
|
var bgProcs = make([]*exec.Cmd, 0)
|
||||||
|
var LastExitCode int
|
||||||
|
|
||||||
func call(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
func call(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
||||||
if in == nil {
|
if in == nil {
|
||||||
|
|
@ -60,7 +61,6 @@ func call(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
exit := 0
|
|
||||||
|
|
||||||
signalChan := make(chan os.Signal, 2)
|
signalChan := make(chan os.Signal, 2)
|
||||||
signal.Notify(signalChan, os.Interrupt, syscall.SIGTERM)
|
signal.Notify(signalChan, os.Interrupt, syscall.SIGTERM)
|
||||||
|
|
@ -74,13 +74,13 @@ func call(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
||||||
signal.Reset(os.Interrupt, syscall.SIGTERM)
|
signal.Reset(os.Interrupt, syscall.SIGTERM)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if exitError, ok := err.(*exec.ExitError); ok {
|
if exitError, ok := err.(*exec.ExitError); ok {
|
||||||
exit = exitError.ExitCode()
|
LastExitCode = exitError.ExitCode()
|
||||||
} else {
|
} else {
|
||||||
log.Log(log.ERR, "Execution step returned unparsable error: " + err.Error(), "call")
|
log.Log(log.ERR, "Execution step returned unparsable error: " + err.Error(), "call")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ast.Token{Tag: ast.NUMBER, Inner: fmt.Sprintf("%d", exit)}
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func bgcall(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
func bgcall(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
||||||
|
|
@ -127,7 +127,6 @@ func fg(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
||||||
|
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
exit := 0
|
|
||||||
|
|
||||||
signalChan := make(chan os.Signal, 2)
|
signalChan := make(chan os.Signal, 2)
|
||||||
signal.Notify(signalChan, os.Interrupt, syscall.SIGTERM)
|
signal.Notify(signalChan, os.Interrupt, syscall.SIGTERM)
|
||||||
|
|
@ -141,13 +140,13 @@ func fg(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
||||||
signal.Reset(os.Interrupt, syscall.SIGTERM)
|
signal.Reset(os.Interrupt, syscall.SIGTERM)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if exitError, ok := err.(*exec.ExitError); ok {
|
if exitError, ok := err.(*exec.ExitError); ok {
|
||||||
exit = exitError.ExitCode()
|
LastExitCode = exitError.ExitCode()
|
||||||
} else {
|
} else {
|
||||||
log.Log(log.ERR, "Execution step returned unparsable error: " + err.Error(), "call")
|
log.Log(log.ERR, "Execution step returned error: " + err.Error(), "call")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ast.Token{Tag: ast.NUMBER, Inner: fmt.Sprintf("%d", exit)}
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func read_cmd(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
func read_cmd(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
||||||
|
|
@ -193,9 +192,17 @@ func read_cmd(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
||||||
close(signalChan)
|
close(signalChan)
|
||||||
signal.Reset(os.Interrupt, syscall.SIGTERM)
|
signal.Reset(os.Interrupt, syscall.SIGTERM)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Log(log.ERR, err.Error(), "$")
|
if exitError, ok := err.(*exec.ExitError); ok {
|
||||||
|
LastExitCode = exitError.ExitCode()
|
||||||
|
} else {
|
||||||
|
log.Log(log.ERR, "Execution step returned error: " + err.Error(), "$")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ast.Token{Tag: ast.STRING, Inner: out.String()}
|
return &ast.Token{Tag: ast.STRING, Inner: out.String()}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func get_exit(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
|
||||||
|
return &ast.Token{Tag: ast.NUMBER, Inner: fmt.Sprintf("%d", LastExitCode)}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -122,6 +122,13 @@ func GenFuncTable() ast.FuncTable {
|
||||||
TimesCalled: 0,
|
TimesCalled: 0,
|
||||||
Args: 0,
|
Args: 0,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"?": &ast.Function{
|
||||||
|
Function: get_exit,
|
||||||
|
Name:"get exit code",
|
||||||
|
TimesCalled: 0,
|
||||||
|
Args: 0,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return stdlib
|
return stdlib
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue