func (c Executable) Run() (string, error) {
	out, err := pipe.CombinedOutput(c.Pipe)
	return string(out), err
}
Run executes the command and returns the combined stdout and stderr, and the
error if any.
package sh
import (
	"io"
	"strings"
	"labix.org/v2/pipe"
)
func Cmd(name string, args0 ...string) func(args ...string) Executable {
	return func(args1 ...string) Executable {
		return Executable{pipe.Exec(name, append(args0, args1...)...)}
	}
}
func Runner(name string, args0 ...string) func(args ...string) (string, error) {
	return func(args1 ...string) (string, error) {
		return Executable{pipe.Exec(name, append(args0, args1...)...)}.Run()
	}
}
func Dump(filename string) Executable {
	return Executable{pipe.ReadFile(filename)}
}
func Read(r io.Reader) Executable {
	return Executable{pipe.Read(r)}
}
func Pipe(cmds ...Executable) Executable {
	ps := make([]pipe.Pipe, len(cmds))
	for i, c := range cmds {
		ps[i] = c.Pipe
	}
	return Executable{pipe.Line(ps...)}
}
func PipeWith(stdin string, cmds ...Executable) Executable {
	ps := make([]pipe.Pipe, len(cmds)+1)
	ps[0] = pipe.Read(strings.NewReader(stdin))
	for i, c := range cmds {
		ps[i+1] = c.Pipe
	}
	return Executable{pipe.Line(ps...)}
}
type Executable struct {
	pipe.Pipe
}
func (c Executable) RunWith(stdin string) (string, error) {
	out, err := pipe.CombinedOutput(
		pipe.Line(pipe.Read(strings.NewReader(stdin)), c.Pipe),
	)
	return string(out), err
}