|
|
@@ -21,6 +21,7 @@ import (
|
|
|
"fmt"
|
|
|
"io/ioutil"
|
|
|
"os"
|
|
|
+ "os/signal"
|
|
|
"path/filepath"
|
|
|
"runtime"
|
|
|
"strconv"
|
|
|
@@ -353,7 +354,7 @@ func console(ctx *cli.Context) {
|
|
|
// preload user defined JS files into the console
|
|
|
err = repl.preloadJSFiles(ctx)
|
|
|
if err != nil {
|
|
|
- utils.Fatalf("unable to preload JS file %v", err)
|
|
|
+ utils.Fatalf("%v", err)
|
|
|
}
|
|
|
|
|
|
// in case the exec flag holds a JS statement execute it and return
|
|
|
@@ -372,6 +373,7 @@ func execScripts(ctx *cli.Context) {
|
|
|
// Create and start the node based on the CLI flags
|
|
|
node := utils.MakeSystemNode(ClientIdentifier, nodeNameVersion, makeDefaultExtra(), ctx)
|
|
|
startNode(ctx, node)
|
|
|
+ defer node.Stop()
|
|
|
|
|
|
// Attach to the newly started node and execute the given scripts
|
|
|
client, err := node.Attach()
|
|
|
@@ -383,10 +385,24 @@ func execScripts(ctx *cli.Context) {
|
|
|
ctx.GlobalString(utils.RPCCORSDomainFlag.Name),
|
|
|
client, false)
|
|
|
|
|
|
+ // Run all given files.
|
|
|
for _, file := range ctx.Args() {
|
|
|
- repl.exec(file)
|
|
|
+ if err = repl.re.Exec(file); err != nil {
|
|
|
+ break
|
|
|
+ }
|
|
|
}
|
|
|
- node.Stop()
|
|
|
+ if err != nil {
|
|
|
+ utils.Fatalf("JavaScript Error: %v", jsErrorString(err))
|
|
|
+ }
|
|
|
+ // JS files loaded successfully.
|
|
|
+ // Wait for pending callbacks, but stop for Ctrl-C.
|
|
|
+ abort := make(chan os.Signal, 1)
|
|
|
+ signal.Notify(abort, os.Interrupt)
|
|
|
+ go func() {
|
|
|
+ <-abort
|
|
|
+ repl.re.Stop(false)
|
|
|
+ }()
|
|
|
+ repl.re.Stop(true)
|
|
|
}
|
|
|
|
|
|
// startNode boots up the system node and all registered protocols, after which
|