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

     1  // Copyright 2017-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 checker
     6  
     7  import (
     8  	"log"
     9  	"os"
    10  	"os/exec"
    11  )
    12  
    13  // DefaultShell is used by EmergencyShell
    14  var DefaultShell = "elvish"
    15  
    16  func runCmd(prog string, args ...string) error {
    17  	cmd := exec.Command(prog, args...)
    18  	cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr
    19  	return cmd.Run()
    20  }
    21  
    22  // CommandExecutor returns a check that runs the provided command and arguments.
    23  func CommandExecutor(prog string, args ...string) Checker {
    24  	return func() error {
    25  		return runCmd(prog, args...)
    26  	}
    27  }
    28  
    29  // CommandExecutorRemediation is like CommandExecutor, but returns a Remediator.
    30  func CommandExecutorRemediation(prog string, args ...string) Remediator {
    31  	return func() error {
    32  		return runCmd(prog, args...)
    33  	}
    34  }
    35  
    36  // EmergencyShell is a remediation that prints the given banner, and then calls
    37  // an emergency shell.
    38  func EmergencyShell(banner string) Remediator {
    39  	return func() error {
    40  		log.Print(green("Running emergency shell: %s", DefaultShell))
    41  		if banner != "" {
    42  			log.Print(banner)
    43  		}
    44  		return CommandExecutorRemediation(DefaultShell)()
    45  	}
    46  }