MCPcopy
hub / github.com/go-task/task / RunCommand

Function RunCommand

internal/execext/exec.go:35–91  ·  view source on GitHub ↗

RunCommand runs a shell command

(ctx context.Context, opts *RunCommandOptions)

Source from the content-addressed store, hash-verified

33
34// RunCommand runs a shell command
35func RunCommand(ctx context.Context, opts *RunCommandOptions) error {
36 if opts == nil {
37 return ErrNilOptions
38 }
39
40 // Set "-e" or "errexit" by default
41 opts.PosixOpts = append(opts.PosixOpts, "e")
42
43 // Format POSIX options into a slice that mvdan/sh understands
44 var params []string
45 for _, opt := range opts.PosixOpts {
46 if len(opt) == 1 {
47 params = append(params, fmt.Sprintf("-%s", opt))
48 } else {
49 params = append(params, "-o")
50 params = append(params, opt)
51 }
52 }
53
54 environ := opts.Env
55 if len(environ) == 0 {
56 environ = os.Environ()
57 }
58
59 r, err := interp.New(
60 interp.Params(params...),
61 interp.Env(expand.ListEnviron(environ...)),
62 interp.ExecHandlers(execHandlers()...),
63 interp.OpenHandler(openHandler),
64 interp.StdIO(opts.Stdin, opts.Stdout, opts.Stderr),
65 dirOption(opts.Dir),
66 )
67 if err != nil {
68 return err
69 }
70
71 parser := syntax.NewParser()
72
73 // Run any shopt commands
74 if len(opts.BashOpts) > 0 {
75 shoptCmdStr := fmt.Sprintf("shopt -s %s", strings.Join(opts.BashOpts, " "))
76 shoptCmd, err := parser.Parse(strings.NewReader(shoptCmdStr), "")
77 if err != nil {
78 return err
79 }
80 if err := r.Run(ctx, shoptCmd); err != nil {
81 return err
82 }
83 }
84
85 // Run the user-defined command
86 p, err := parser.Parse(strings.NewReader(opts.Command), "")
87 if err != nil {
88 return err
89 }
90 return r.Run(ctx, p)
91}
92

Callers 5

RunTaskMethod · 0.92
runCommandMethod · 0.92
HandleDynamicVarMethod · 0.92
IsUpToDateMethod · 0.92

Calls 3

execHandlersFunction · 0.85
dirOptionFunction · 0.70
RunMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…