workgroups/vendor/github.com/posener/script/cat.go
Marvin Preuss f121b05b58
Some checks failed
continuous-integration/drone/push Build is failing
repo: adds goreadme
2021-09-24 18:29:05 +02:00

50 lines
904 B
Go

package script
import (
"fmt"
"io"
"os"
"github.com/hashicorp/go-multierror"
)
// Cat outputs the contents of the given files.
//
// Shell command: cat <path>.
func Cat(paths ...string) Stream {
var (
readers []io.Reader
closers multicloser
errors *multierror.Error
)
for _, path := range paths {
f, err := os.Open(path)
if err != nil {
errors = multierror.Append(errors, fmt.Errorf("open path %s: %v", path, err))
} else {
readers = append(readers, f)
closers = append(closers, f)
}
}
return Stream{
r: readcloser{Reader: io.MultiReader(readers...), Closer: closers},
stage: "cat",
err: errors.ErrorOrNil(),
}
}
type multicloser []io.Closer
func (mc multicloser) Close() error {
var errors *multierror.Error
for _, c := range mc {
if err := c.Close(); err != nil {
errors = multierror.Append(errors, err)
}
}
return errors.ErrorOrNil()
}