github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/libinit/proc.go (about)

     1  // Copyright 2014-2019 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package libinit
     6  
     7  import (
     8  	"os"
     9  	"os/exec"
    10  
    11  	"github.com/u-root/u-root/pkg/upath"
    12  )
    13  
    14  var osDefault = func(*exec.Cmd) {}
    15  
    16  // CommandModifier makes *exec.Cmd construction modular.
    17  type CommandModifier func(c *exec.Cmd)
    18  
    19  // WithArguments adds command-line arguments to a command.
    20  func WithArguments(arg ...string) CommandModifier {
    21  	return func(c *exec.Cmd) {
    22  		if len(arg) > 0 {
    23  			c.Args = append(c.Args, arg...)
    24  		}
    25  	}
    26  }
    27  
    28  // Command constructs an *exec.Cmd object.
    29  func Command(bin string, m ...CommandModifier) *exec.Cmd {
    30  	bin = upath.UrootPath(bin)
    31  	cmd := exec.Command(bin)
    32  	cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr
    33  	osDefault(cmd)
    34  	for _, mod := range m {
    35  		mod(cmd)
    36  	}
    37  	return cmd
    38  }