浏览代码

beam/examples/beamsh: scripts can be passed as filenames

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
Solomon Hykes 11 年之前
父节点
当前提交
e1c8dbba97
共有 2 个文件被更改,包括 49 次插入21 次删除
  1. 41 21
      pkg/beam/examples/beamsh/beamsh.go
  2. 8 0
      pkg/beam/examples/beamsh/helloworld.ds

+ 41 - 21
pkg/beam/examples/beamsh/beamsh.go

@@ -25,34 +25,54 @@ func main() {
 		Fatal(err)
 	}
 	defer devnull.Close()
-	if term.IsTerminal(0) {
-		input := bufio.NewScanner(os.Stdin)
-		for {
-			os.Stdout.Write([]byte("beamsh> "))
-			if !input.Scan() {
-				break
-			}
-			line := input.Text()
-			if len(line) != 0 {
-				cmd, err := dockerscript.Parse(strings.NewReader(line))
-				if err != nil {
-					fmt.Fprintf(os.Stderr, "error: %v\n", err)
-					continue
+	if len(os.Args) == 1 {
+		if term.IsTerminal(0) {
+			input := bufio.NewScanner(os.Stdin)
+			for {
+				os.Stdout.Write([]byte("beamsh> "))
+				if !input.Scan() {
+					break
+				}
+				line := input.Text()
+				if len(line) != 0 {
+					cmd, err := dockerscript.Parse(strings.NewReader(line))
+					if err != nil {
+						fmt.Fprintf(os.Stderr, "error: %v\n", err)
+						continue
+					}
+					if err := executeScript(devnull, cmd); err != nil {
+						Fatal(err)
+					}
+				}
+				if err := input.Err(); err == io.EOF {
+					break
+				} else if err != nil {
+					Fatal(err)
 				}
-				executeScript(devnull, cmd)
 			}
-			if err := input.Err(); err == io.EOF {
-				break
-			} else if err != nil {
+		} else {
+			script, err := dockerscript.Parse(os.Stdin)
+			if err != nil {
+				Fatal("parse error: %v\n", err)
+			}
+			if err := executeScript(devnull, script); err != nil {
 				Fatal(err)
 			}
 		}
 	} else {
-		script, err := dockerscript.Parse(os.Stdin)
-		if err != nil {
-			Fatal("parse error: %v\n", err)
+		for _, scriptpath := range os.Args[1:] {
+			f, err := os.Open(scriptpath)
+			if err != nil {
+				Fatal(err)
+			}
+			script, err := dockerscript.Parse(f)
+			if err != nil {
+				Fatal("parse error: %v\n", err)
+			}
+			if err := executeScript(devnull, script); err != nil {
+				Fatal(err)
+			}
 		}
-		executeScript(devnull, script)
 	}
 }
 

+ 8 - 0
pkg/beam/examples/beamsh/helloworld.ds

@@ -0,0 +1,8 @@
+#!/usr/bin/env beamsh
+
+print {
+	trace {
+		emit hello
+		emit world
+	}
+}