command

package
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 22, 2021 License: MIT Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Commands = []*cli.Command{
	dumpCommand,
	evalCommand,
	renderCommand,
	runCommand,
	shellCommand,
	transpileCommand,
	zshCommand,
	zshCompletionCommand,
}
View Source
var DefaultCommand = &cli.Command{
	Hidden: true,
	Action: func(c *cli.Context) error {
		_, eng, err := initializeConfigEngine(c, true)
		if err != nil {
			return err
		}

		env, args, files, cwd := eng.Map(os.Environ(), c.Args().Slice())
		if len(args) == 0 {
			if len(c.String("input")) == 0 && !isatty.IsTerminal(os.Stdin.Fd()) {
				return runCommand.Action(c)
			}
			return replCommand.Action(c)
		}

		args, err = template.RenderStrings(args, c.String("ldelim"), c.String("rdelim"), funcmap)
		if err != nil {
			return err
		}
		args = util.FilterEmptyStrings(args)

		for filename, data := range files {
			f, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0400)
			if err != nil {
				return err
			}
			if err := template.Render(f, data, c.String("ldelim"), c.String("rdelim"), funcmap); err != nil {
				return err
			}
			if !c.Bool("keep") {
				defer os.Remove(filename)
			}
		}

		if c.Bool("expand") {
			for i, arg := range args {
				if i > 0 {
					fmt.Print(" ")
				}
				fmt.Printf("%#v", arg)
			}
			fmt.Print("\n")
			return nil
		}

		cmd := exec.CommandContext(c.Context, args[0], args[1:]...)
		cmd.Dir = cwd
		cmd.Env = env
		cmd.Stdin = c.App.Reader
		cmd.Stdout = c.App.Writer
		cmd.Stderr = os.Stderr

		signalC := make(chan os.Signal, 32)
		signal.Notify(signalC)

		if err := cmd.Start(); err != nil {
			return err
		}

		go func() {
			for signal := range signalC {
				_ = cmd.Process.Signal(signal)
			}
		}()

		state, err := cmd.Process.Wait()
		if err != nil {
			return err
		}

		syscall.Exit(state.ExitCode())
		return nil
	},
}

Functions

func CommandsFlags

func CommandsFlags() []cli.Flag

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL