Categorygithub.com/futurist/better-command
repository
1.0.6
Repository: https://github.com/futurist/better-command.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author

# README

better-command

PkgGoDev Build Status Go Report Card Coverage

Go better command run shell commands safely and handily.

More details please check godoc

Install

go get github.com/futurist/better-command

Usage

New() with %s as placeholder from args

// below is true:
import "github.com/futurist/better-command/command"

reflect.DeepEqual(
    command.NewSh(`echo %s '%s'`, "logs: $HOME/$abc/logs", "logs: $HOME/$abc/logs").Args,
    []string{"sh", "-c", `echo logs\:\ $HOME/$abc/logs logs\:\ \$HOME/\$abc/logs `}
)

The argument for '%s' will be always safely escaped.

The argument for %s and "%s" will be always safely escaped except $VAR and ${VAR}, thus you can use shell variables in side arguments.

The New and NewSh method argments just like fmt.Printf, the first arg is formatString, rest is format arguments, but with one exception: they can only accept %s as format placeholder. If you want use like %v, you can manually invoke .toString() method of the argument to pass as string.

Chained style with handily functions

import "github.com/futurist/better-command/command"

command.NewSh(`echo %s '%s'`, "logs: $HOME/$abc/logs", "logs: $HOME/$abc/logs")
    .Stdout(os.Stdout)
    .Stdin(os.Stdin)
    .Timeout(time.Second*10)
    .CombinedOutput()

There methods can be chained(in the middle):

  • UseSudo
  • AsUser
  • Timeout
  • Context
  • Env
  • Dir
  • Stdin
  • Stdout
  • Stderr
  • Shell
  • OnExit

But below methods cannot be chained(finalize):

  • Run
  • Output
  • CombinedOutput

Default with context

import "github.com/futurist/better-command/command"

cmd := command.New([]string{"bash", "-c", "sleep 10; echo ok"})
ctx, cancel := context.WithCancel(context.Background())
go func() {
    time.Sleep(time.Millisecond * 100)
    cancel()
}()
cmd.Context(ctx).Run()

The command will be canceled in 100ms.

More details please see godoc:

https://pkg.go.dev/github.com/futurist/better-command/command