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  }