// Code generated by cue get go. DO NOT EDIT.

// Package exec defines tasks for running commands.
//
// These are the supported tasks:
//
//     // Run executes the given shell command.
//     Run: {
//     	$id: *"tool/exec.Run" | "exec" // exec for backwards compatibility
//
//     	// cmd is the command to run.
//     	cmd: string | [string, ...string]
//
//     	// install is an optional command to install the binaries needed
//     	// to run the command.
//     	install?: string | [string, ...string]
//
//     	// env defines the environment variables to use for this system.
//     	env: [string]: string
//
//     	// stdout captures the output from stdout if it is of type bytes or string.
//     	// The default value of null indicates it is redirected to the stdout of the
//     	// current process.
//     	stdout: *null | string | bytes
//
//     	// stderr is like stdout, but for errors.
//     	stderr: *null | string | bytes
//
//     	// stdin specifies the input for the process. If stdin is not a concrete
//     	// value, it will capture the input from stdin. Otherwise, if it is null,
//     	// there is no input. Otherwise it will read from the given value.
//     	stdin: *null | string | bytes
//
//     	// success is set to true when the process terminates with with a zero exit
//     	// code or false otherwise. The user can explicitly specify the value
//     	// force a fatal error if the desired success code is not reached.
//     	success: bool
//     }
//
package exec
