summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-12-17 23:27:09 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-12-17 23:27:09 +0300
commit95ae97eb7eaa268a06bc2b90184eaed6342b3142 (patch)
tree0ce90378b3c6c09dc51778f798e632148c3d65cc
parent42a4681b424c7e2ea4312d0e405c5a4c50dd22d0 (diff)
add cmd.env special variable
-rw-r--r--cmd/tunneld/main.go14
-rw-r--r--pkg/server/cmds.go2
-rw-r--r--pkg/test/test.go2
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 {