code: func ephemeralConsole(ctx *cli.Context) error {
  	// Create and start the node based on the CLI flags
  	node := makeFullNode(ctx)
  	startNode(ctx, node)
  	defer node.Close()
  
  	// Attach to the newly started node and start the JavaScript console
  	client, err := node.Attach()
  	if err != nil {
  		utils.Fatalf("Failed to attach to the inproc geth: %v", err)
  	}
  	config := console.Config{
  		DataDir: utils.MakeDataDir(ctx),
  		DocRoot: ctx.GlobalString(utils.JSpathFlag.Name),
  		Client:  client,
  		Preload: utils.MakeConsolePreloads(ctx),
  	}
  
  	console, err := console.New(config)
  	if err != nil {
  		utils.Fatalf("Failed to start the JavaScript console: %v", err)
  	}
  	defer console.Stop(false)
  
  	// Evaluate each of the specified JavaScript files
  	for _, file := range ctx.Args() {
  		if err = console.Execute(file); err != nil {
  			utils.Fatalf("Failed to execute %s: %v", file, err)
  		}
  	}
  	// Wait for pending callbacks, but stop for Ctrl-C.
  	abort := make(chan os.Signal, 1)
  	signal.Notify(abort, syscall.SIGINT, syscall.SIGTERM)
  
  	go func() {
  		<-abort
  		os.Exit(0)
  	}()
  	console.Stop(true)
  
  	return nil
  }
docs: // ephemeralConsole starts a new geth node, attaches an ephemeral JavaScript
  // console to it, executes each of the files specified as arguments and tears
  // everything down.