diff options
| -rw-r--r-- | cmd/tunneld/main.go | 14 | ||||
| -rw-r--r-- | pkg/server/cmds.go | 2 | ||||
| -rw-r--r-- | pkg/test/test.go | 2 |
3 files changed, 15 insertions, 3 deletions
diff --git a/cmd/tunneld/main.go b/cmd/tunneld/main.go index 71af6d4..8ae1e4e 100644 --- a/cmd/tunneld/main.go +++ b/cmd/tunneld/main.go @@ -15,6 +15,7 @@ import ( "path" "strconv" "strings" + "sync" "syscall" "tunnel/pkg/config" "tunnel/pkg/server" @@ -234,9 +235,13 @@ func runCommand(s *server.Server, name string) error { log.Printf("cmd \"%s\" try", cmd) - args := strings.Split(cmd, " ") + args := strings.Fields(cmd) c := exec.Command(args[0], args[1:]...) + if env := s.Env().Value("cmd.env"); env != "" { + c.Env = append(os.Environ(), strings.Split(env, ",")...) + } + stdout, _ := c.StdoutPipe() stderr, _ := c.StderrPipe() @@ -244,12 +249,17 @@ func runCommand(s *server.Server, name string) error { return fmt.Errorf("cmd \"%s\" start failed: %w", cmd, err) } + var wg sync.WaitGroup + logger := func(s string, r io.Reader) { for scanner := bufio.NewScanner(r); scanner.Scan(); { log.Println(s, ">", scanner.Text()) } + wg.Done() } + wg.Add(2) + go logger(args[0], stdout) go logger(args[0], stderr) @@ -257,6 +267,8 @@ func runCommand(s *server.Server, name string) error { return fmt.Errorf("cmd \"%s\" failed: %w", cmd, err) } + wg.Wait() + log.Printf("cmd \"%s\" ok", cmd) return nil diff --git a/pkg/server/cmds.go b/pkg/server/cmds.go index 3ce7150..dbd7083 100644 --- a/pkg/server/cmds.go +++ b/pkg/server/cmds.go @@ -27,7 +27,7 @@ func newNode() *node { } func newCmd(f func(r *request), where string) { - path := strings.Split(where, " ") + path := strings.Fields(where) node := cmds for _, name := range path { diff --git a/pkg/test/test.go b/pkg/test/test.go index 6d83ad0..e2ecfcb 100644 --- a/pkg/test/test.go +++ b/pkg/test/test.go @@ -77,7 +77,7 @@ func (e *env) newInstance() *Client { func (c *Client) Send(format string, args ...interface{}) string { s := fmt.Sprintf(format, args...) - t := strings.Split(s, " ") + t := strings.Fields(s) r, err := c.Client.Send(t) if err != nil { |
