github.com/hwaf/hwaf@v0.0.0-20140814122253-5465f73b20f1/cmd_dump_env.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "os" 8 "os/exec" 9 // "path/filepath" 10 11 "github.com/gonuts/commander" 12 "github.com/gonuts/flag" 13 ) 14 15 func hwaf_make_cmd_dump_env() *commander.Command { 16 cmd := &commander.Command{ 17 Run: hwaf_run_cmd_dump_env, 18 UsageLine: "dump-env [options]", 19 Short: "print the environment on STDOUT", 20 Long: ` 21 dump-env prints the environment on STDOUT. 22 23 ex: 24 $ hwaf dump-env 25 $ hwaf dump-env -shell=sh 26 $ hwaf dump-env -shell=csh 27 `, 28 Flag: *flag.NewFlagSet("hwaf-dump-env", flag.ExitOnError), 29 //CustomFlags: true, 30 } 31 cmd.Flag.Bool("v", false, "enable verbose output") 32 cmd.Flag.String("shell", "", "type of shell to print the environment for (default=sh)") 33 return cmd 34 } 35 36 func hwaf_run_cmd_dump_env(cmd *commander.Command, args []string) error { 37 var err error 38 n := "hwaf-" + cmd.Name() 39 40 switch len(args) { 41 case 0: 42 // ok 43 default: 44 return fmt.Errorf("%s: does not take any argument\n", n) 45 } 46 47 var export_var func(k string) string 48 shell := cmd.Flag.Lookup("shell").Value.Get().(string) 49 //verbose := cmd.Flag.Lookup("v").Value.Get().(bool) 50 51 if shell == "" { 52 shell = "sh" 53 } 54 55 switch shell { 56 default: 57 return fmt.Errorf("%s: shell of type [%s] is unknown", n, shell) 58 59 case "sh": 60 export_var = func(k string) string { return fmt.Sprintf("export %s=", k) } 61 62 case "csh": 63 export_var = func(k string) string { return fmt.Sprintf("setenv %s ", k) } 64 } 65 66 if export_var == nil { 67 err = fmt.Errorf("%s: could find a suitable shell", n) 68 } 69 70 bin, err := exec.LookPath(os.Args[0]) 71 if err != nil { 72 return err 73 } 74 75 buf := new(bytes.Buffer) 76 waf := exec.Command( 77 bin, "waf", "dump-env", 78 ) 79 waf.Stdin = os.Stdin 80 waf.Stdout = buf 81 waf.Stderr = os.Stderr 82 83 err = waf.Run() 84 if err != nil { 85 return err 86 } 87 88 env := make(map[string]string) 89 err = json.Unmarshal(buf.Bytes(), &env) 90 if err != nil { 91 return err 92 } 93 94 //fmt.Printf("%v\n", env) 95 for k, v := range env { 96 if k == "_" || k == "PS1" { 97 continue 98 } 99 fmt.Printf("%s%q\n", export_var(k), v) 100 } 101 102 return nil 103 } 104 105 // EOF