github.com/teddydd/sh@v2.6.4+incompatible/interp/example_test.go (about) 1 // Copyright (c) 2018, Daniel Martà <mvdan@mvdan.cc> 2 // See LICENSE for licensing information 3 4 package interp_test 5 6 import ( 7 "context" 8 "os" 9 "strings" 10 11 "mvdan.cc/sh/expand" 12 "mvdan.cc/sh/interp" 13 "mvdan.cc/sh/syntax" 14 ) 15 16 func Example() { 17 src := ` 18 foo=abc 19 for i in 1 2 3; do 20 foo+=$i 21 done 22 let bar=(2 + 3) 23 echo $foo $bar 24 echo $GLOBAL 25 ` 26 file, _ := syntax.NewParser().Parse(strings.NewReader(src), "") 27 runner, _ := interp.New( 28 interp.Env(expand.ListEnviron("GLOBAL=global_value")), 29 interp.StdIO(nil, os.Stdout, os.Stdout), 30 ) 31 runner.Run(context.TODO(), file) 32 // Output: 33 // abc123 5 34 // global_value 35 } 36 37 func ExampleModuleExec() { 38 src := ` 39 ls example_test.* || echo "ls failed" 40 rm example_test.* || echo "rm failed" 41 ` 42 file, _ := syntax.NewParser().Parse(strings.NewReader(src), "") 43 exec := func(ctx context.Context, path string, args []string) error { 44 switch args[0] { 45 case "ls": 46 // whitelist the "ls" program 47 return interp.DefaultExec(ctx, path, args) 48 default: 49 // refuse to run any other program 50 return interp.ExitStatus(1) 51 } 52 } 53 runner, _ := interp.New( 54 interp.StdIO(nil, os.Stdout, os.Stdout), 55 interp.Module(interp.ModuleExec(exec)), 56 ) 57 runner.Run(context.TODO(), file) 58 // Output: 59 // example_test.go 60 // rm failed 61 }