github.com/Venafi/vcert/v5@v5.10.2/pkg/playbook/util/cmdexec.go (about) 1 //go:build !windows 2 3 /* 4 * Copyright 2023 Venafi, Inc. 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package util 20 21 import ( 22 "bytes" 23 "os/exec" 24 25 "go.uber.org/zap" 26 ) 27 28 // ExecuteScript takes the afterAction input and passes it to a Cmd struct to be executed. 29 // 30 // No validation is done over the afterAction string, so caution is advised. 31 func ExecuteScript(afterAction string) (string, error) { 32 zap.L().Debug("running script in shell", zap.String("action", afterAction)) 33 34 cmd := exec.Command("sh", "-c", afterAction) 35 var out bytes.Buffer 36 cmd.Stdout = &out 37 err := cmd.Run() 38 if err != nil { 39 zap.L().Error("could not run script", zap.Error(err)) 40 return "", err 41 } 42 zap.L().Debug("script output", zap.String("stdout", out.String())) 43 return out.String(), nil 44 }