github.com/NeowayLabs/nash@v0.2.2-0.20200127205349-a227041ffd50/internal/sh/builtin/print.go (about) 1 package builtin 2 3 import ( 4 "fmt" 5 "io" 6 7 "github.com/madlambda/nash/errors" 8 "github.com/madlambda/nash/sh" 9 ) 10 11 type ( 12 printFn struct { 13 fmt string 14 args []interface{} 15 } 16 ) 17 18 func newPrint() *printFn { 19 return &printFn{} 20 } 21 22 func (p *printFn) ArgNames() []sh.FnArg { 23 return []sh.FnArg{ 24 sh.NewFnArg("fmt", false), 25 sh.NewFnArg("arg...", true), 26 } 27 } 28 29 func (p *printFn) Run(in io.Reader, out io.Writer, err io.Writer) ([]sh.Obj, error) { 30 fmt.Fprintf(out, p.fmt, p.args...) 31 return nil, nil 32 } 33 34 func (p *printFn) SetArgs(args []sh.Obj) error { 35 if len(args) == 0 { 36 return errors.NewError("print expects at least 1 argument") 37 } 38 39 p.fmt = args[0].String() 40 p.args = nil 41 for _, arg := range args[1:] { 42 p.args = append(p.args, arg.String()) 43 } 44 45 return nil 46 }