cmd/cue/cmd: fail in case flag evaluation fails

Fixes #248

Change-Id: Ifb39450af2b99aba41e37a17822780249669c0c0
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/4725
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cmd/cue/cmd/eval.go b/cmd/cue/cmd/eval.go
index efa8afa..89c579f 100644
--- a/cmd/cue/cmd/eval.go
+++ b/cmd/cue/cmd/eval.go
@@ -140,6 +140,9 @@
 				writeNode(format.Node(e))
 			}
 			v := inst.Eval(e)
+			if err := v.Err(); err != nil {
+				return err
+			}
 			if flagConcrete.Bool(cmd) && !flagIgnore.Bool(cmd) {
 				if err := v.Validate(cue.Concrete(true)); err != nil {
 					exitIfErr(cmd, inst, err, false)
diff --git a/cmd/cue/cmd/root.go b/cmd/cue/cmd/root.go
index b52d9ed..310571b 100644
--- a/cmd/cue/cmd/root.go
+++ b/cmd/cue/cmd/root.go
@@ -44,7 +44,11 @@
 func mkRunE(c *Command, f runFunction) func(*cobra.Command, []string) error {
 	return func(cmd *cobra.Command, args []string) error {
 		c.Command = cmd
-		return f(c, args)
+		err := f(c, args)
+		if err != nil {
+			exitOnErr(c, err, true)
+		}
+		return err
 	}
 }
 
diff --git a/cmd/cue/cmd/testdata/script/eval_e.txt b/cmd/cue/cmd/testdata/script/eval_e.txt
new file mode 100644
index 0000000..18c79b0
--- /dev/null
+++ b/cmd/cue/cmd/testdata/script/eval_e.txt
@@ -0,0 +1,12 @@
+! cue eval -e nonExist
+cmp stderr expect-stderr
+cmp stdout expect-stdout
+
+-- expect-stdout --
+-- expect-stderr --
+reference "nonExist" not found:
+    <expression flag>:1:1
+-- partial.cue --
+package exitcode
+
+a: 1