From c53a1f210cde5eb3e2affdd2aa99d73e77691650 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Mon, 11 Dec 2023 21:15:52 +0100 Subject: [PATCH] cmd/syncthing: Better cli stdin handling (ref #9166) (#9281) Seems to work for me, @AudriusButkevicius. --- cmd/syncthing/cli/main.go | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/cmd/syncthing/cli/main.go b/cmd/syncthing/cli/main.go index 01889c694..4d9fb5727 100644 --- a/cmd/syncthing/cli/main.go +++ b/cmd/syncthing/cli/main.go @@ -10,7 +10,6 @@ import ( "bufio" "fmt" "os" - "os/exec" "github.com/alecthomas/kong" "github.com/flynn-archive/go-shlex" @@ -75,15 +74,21 @@ func (*stdinCommand) Run() error { if len(input) == 0 { continue } - cmd := exec.Command(os.Args[0], append(args[1:], input...)...) - out, err := cmd.CombinedOutput() - fmt.Print(string(out)) + + var cli CLI + p, err := kong.New(&cli) if err != nil { - if _, ok := err.(*exec.ExitError); ok { - // we will continue loop no matter the command succeeds or not - continue - } - return err + // can't happen, really + return fmt.Errorf("creating parser: %w", err) + } + ctx, err := p.Parse(input) + if err != nil { + fmt.Println("Error:", err) + continue + } + if err := ctx.Run(); err != nil { + fmt.Println("Error:", err) + continue } } return scanner.Err()