diff --git a/cmd/syncthing/cli/main.go b/cmd/syncthing/cli/main.go index ab4a8a7a3..f1ef9e4a4 100644 --- a/cmd/syncthing/cli/main.go +++ b/cmd/syncthing/cli/main.go @@ -8,13 +8,13 @@ package cli import ( "bufio" + "fmt" "io/ioutil" "os" "strings" "github.com/alecthomas/kong" "github.com/flynn-archive/go-shlex" - "github.com/mattn/go-isatty" "github.com/pkg/errors" "github.com/urfave/cli" @@ -97,38 +97,41 @@ func Run() error { operationCommand, errorsCommand, debugCommand, + { + Name: "-", + HideHelp: true, + Usage: "Read commands from stdin", + Action: func(ctx *cli.Context) error { + if ctx.NArg() > 0 { + return errors.New("command does not expect any arguments") + } + + // Drop the `-` not to recurse into self. + args := make([]string, len(os.Args)-1) + copy(args, os.Args) + + fmt.Println("Reading commands from stdin...", args) + scanner := bufio.NewScanner(os.Stdin) + for scanner.Scan() { + input, err := shlex.Split(scanner.Text()) + if err != nil { + return errors.Wrap(err, "parsing input") + } + if len(input) == 0 { + continue + } + err = app.Run(append(args, input...)) + if err != nil { + return err + } + } + return scanner.Err() + }, + }, }, }} - tty := isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd()) - if !tty { - // Not a TTY, consume from stdin - scanner := bufio.NewScanner(os.Stdin) - for scanner.Scan() { - input, err := shlex.Split(scanner.Text()) - if err != nil { - return errors.Wrap(err, "parsing input") - } - if len(input) == 0 { - continue - } - err = app.Run(append(os.Args, input...)) - if err != nil { - return err - } - } - err = scanner.Err() - if err != nil { - return err - } - } else { - err = app.Run(os.Args) - if err != nil { - return err - } - } - - return nil + return app.Run(os.Args) } func parseFlags(c *preCli) error { diff --git a/go.mod b/go.mod index c85b7aca8..d5bff0083 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/syncthing/syncthing require ( github.com/AudriusButkevicius/pfilter v0.0.0-20210511165305-e9aaf99ab213 - github.com/AudriusButkevicius/recli v0.0.5 + github.com/AudriusButkevicius/recli v0.0.6 github.com/alecthomas/kong v0.2.16 github.com/bkaradzic/go-lz4 v0.0.0-20160924222819-7224d8d8f27e github.com/calmh/xdr v1.1.0 @@ -30,7 +30,6 @@ require ( github.com/lib/pq v1.10.1 github.com/lucas-clemente/quic-go v0.19.3 github.com/maruel/panicparse v1.6.1 - github.com/mattn/go-isatty v0.0.12 github.com/maxbrunsfeld/counterfeiter/v6 v6.3.0 github.com/minio/sha256-simd v1.0.0 github.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75 diff --git a/go.sum b/go.sum index 526155dc7..b83902e30 100644 --- a/go.sum +++ b/go.sum @@ -7,12 +7,10 @@ dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBr dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/AudriusButkevicius/pfilter v0.0.0-20210510194644-fad42c10c5ac h1:ua8XsAiW9JrUa97ioh+ZaZu2JeSMrhcQ2peBxSMrqSs= -github.com/AudriusButkevicius/pfilter v0.0.0-20210510194644-fad42c10c5ac/go.mod h1:EEEtt5r8y0gGHlRFF2+cLx0WUy/rKHnjALmom5E0+74= github.com/AudriusButkevicius/pfilter v0.0.0-20210511165305-e9aaf99ab213 h1:9E6vGKdipZ+AAkU19TUb5JQKMf44CGAYMtXDAyfonO4= github.com/AudriusButkevicius/pfilter v0.0.0-20210511165305-e9aaf99ab213/go.mod h1:EEEtt5r8y0gGHlRFF2+cLx0WUy/rKHnjALmom5E0+74= -github.com/AudriusButkevicius/recli v0.0.5 h1:xUa55PvWTHBm17T6RvjElRO3y5tALpdceH86vhzQ5wg= -github.com/AudriusButkevicius/recli v0.0.5/go.mod h1:Q2E26yc6RvWWEz/TJ/goUp6yXvipYdJI096hpoaqsNs= +github.com/AudriusButkevicius/recli v0.0.6 h1:hY9KH09vIbx0fYpkvdWbvnh67uDiuJEVDGhXlefysDQ= +github.com/AudriusButkevicius/recli v0.0.6/go.mod h1:Nhfib1j/VFnLrXL9cHgA+/n2O6P5THuWelOnbfPNd78= github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c h1:/IBSNwUN8+eKzUzbJPqhK839ygXJ82sde8x3ogr6R28= github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=