// Start server. binDir := sh.MakeTempDir() binPath := gosh.BuildGoPkg(sh, binDir, "github.com/asadovsky/gosh/internal/gosh_example_server") c := sh.Cmd(binPath) c.Start() addr := c.AwaitVars("addr")["addr"] fmt.Println(addr) // Run client. binPath = gosh.BuildGoPkg(sh, binDir, "github.com/asadovsky/gosh/internal/gosh_example_client") c = sh.Cmd(binPath, "-addr="+addr) fmt.Print(c.Stdout()) } var ( getFunc = gosh.RegisterFunc("getFunc", lib.Get) serveFunc = gosh.RegisterFunc("serveFunc", lib.Serve) ) // Mirrors TestFuncCmd in shell_test.go. func ExampleFuncCmd() { sh := gosh.NewShell(nil) defer sh.Cleanup() // Start server. c := sh.FuncCmd(serveFunc) c.Start() addr := c.AwaitVars("addr")["addr"] fmt.Println(addr) // Run client.
func setsErr(t *testing.T, sh *gosh.Shell, f func()) { continueOnError := sh.ContinueOnError sh.ContinueOnError = true f() nok(t, sh.Err) sh.Err = nil sh.ContinueOnError = continueOnError } //////////////////////////////////////////////////////////////////////////////// // Simple registered functions // Simplified versions of various Unix commands. var ( catFunc = gosh.RegisterFunc("catFunc", func() error { _, err := io.Copy(os.Stdout, os.Stdin) return err }) echoFunc = gosh.RegisterFunc("echoFunc", func() error { _, err := fmt.Println(os.Args[1]) return err }) readFunc = gosh.RegisterFunc("readFunc", func() { bufio.NewReader(os.Stdin).ReadString('\n') }) ) // Functions with parameters. var ( exitFunc = gosh.RegisterFunc("exitFunc", func(code int) { os.Exit(code) })
"net/url" "os" "strings" "github.com/asadovsky/gosh" "github.com/asadovsky/cdb/server/hub" ) var ( loopback = flag.Bool("loopback", true, "") port = flag.Int("port", 4000, "") peerAddrs = flag.String("peer-addrs", "", "comma-separated peer addrs") ) var serve = gosh.RegisterFunc("serve", hub.Serve) func ok(err error) { if err != nil { panic(err) } } func ip() (string, error) { addrs, err := net.InterfaceAddrs() if err != nil { return "", err } for _, a := range addrs { if x, ok := a.(*net.IPNet); ok && !x.IP.IsLoopback() && x.IP.To4() != nil { return x.IP.String(), nil