pkg runutil, func GetOriginalError(error) error
pkg runutil, func IsExist(error) bool
pkg runutil, func IsNotExist(error) bool
pkg runutil, func IsPermission(error) bool
pkg runutil, func IsTimeout(error) bool
pkg runutil, func NewSequence(map[string]string, io.Reader, io.Writer, io.Writer, bool, bool) Sequence
pkg runutil, func TranslateExitCode(error) error
pkg runutil, method (*Handle) Kill() error
pkg runutil, method (*Handle) Pid() int
pkg runutil, method (*Handle) Signal(os.Signal) error
pkg runutil, method (*Handle) Wait() error
pkg runutil, method (Sequence) AssertDirExists(string) Sequence
pkg runutil, method (Sequence) AssertFileExists(string) Sequence
pkg runutil, method (Sequence) Call(func() error, string, ...interface{}) Sequence
pkg runutil, method (Sequence) Capture(io.Writer, io.Writer) Sequence
pkg runutil, method (Sequence) Chdir(string) Sequence
pkg runutil, method (Sequence) Chmod(string, os.FileMode) Sequence
pkg runutil, method (Sequence) Copy(io.Writer, io.Reader) (int64, error)
pkg runutil, method (Sequence) Create(string) (*os.File, error)
pkg runutil, method (Sequence) Dir(string) Sequence
pkg runutil, method (Sequence) Done() error
pkg runutil, method (Sequence) Env(map[string]string) Sequence
pkg runutil, method (Sequence) Error() error
pkg runutil, method (Sequence) Fprintf(io.Writer, string, ...interface{}) Sequence
pkg runutil, method (Sequence) IsDir(string) (bool, error)
pkg runutil, method (Sequence) IsFile(string) (bool, error)
pkg runutil, method (Sequence) Last(string, ...string) error
pkg runutil, method (Sequence) Lstat(string) (os.FileInfo, error)
pkg runutil, method (Sequence) MkdirAll(string, os.FileMode) Sequence
pkg runutil, method (Sequence) Open(string) (*os.File, error)
pkg runutil, method (Sequence) OpenFile(string, int, os.FileMode) (*os.File, error)
pkg runutil, method (Sequence) Output([]string) Sequence
pkg runutil, method (Sequence) Popd() Sequence
pkg runutil, method (Sequence) Pushd(string) Sequence
pkg runutil, method (Sequence) Read(io.Reader) Sequence
pkg runutil, method (Sequence) ReadDir(string) ([]os.FileInfo, error)
pkg runutil, method (Sequence) ReadFile(string) ([]byte, error)
pkg runutil, method (Sequence) Readlink(string) (string, error)
pkg runutil, method (Sequence) Remove(string) Sequence
pkg runutil, method (Sequence) RemoveAll(string) Sequence
pkg runutil, method (Sequence) Rename(string, string) Sequence
pkg runutil, method (Sequence) Run(string, ...string) Sequence
pkg runutil, method (Sequence) RunOpts() bool
pkg runutil, method (Sequence) SetEnv(map[string]string) Sequence
pkg runutil, method (Sequence) Start(string, ...string) (*Handle, error)
pkg runutil, method (Sequence) Stat(string) (os.FileInfo, error)
pkg runutil, method (Sequence) Symlink(string, string) Sequence
pkg runutil, method (Sequence) TempDir(string, string) (string, error)
pkg runutil, method (Sequence) TempFile(string, string) (*os.File, error)
pkg runutil, method (Sequence) Timeout(time.Duration) Sequence
pkg runutil, method (Sequence) Verbose(bool) Sequence
pkg runutil, method (Sequence) WriteFile(string, []byte, os.FileMode) Sequence
pkg runutil, type Handle struct
pkg runutil, type Sequence struct
