Go-command-eval is an open source lib who evaluate shell command results against eval expr
go get github.com/chen-keinan/go-command-eval
create shell command which return one result
shCmd:=[]string{"ls /etc/hosts | awk -F \" \" '{print $1}' |awk 'FNR <= 1'"}
evaluate command result with eval expression ( ${0} is the result from 1st shell command)
evalExpr := "'${0}' == '/etc/hosts'"
create two shell commands with one result for each
shCmd := []string{"ls /etc/hosts | awk -F \" \" '{print $1}' |awk 'FNR <= 1'",
"ls /etc/group | awk -F \" \" '{print $1}' |awk 'FNR <= 1'"}
evaluate each command result with eval expression
evalExpr := "'${0}' == '/etc/hosts'; && '${1}' == '/etc/group';"
create shell command with return two results
shCmd := []string{"ls /etc | awk -F \" \" '{print $1}' |awk 'FNR <= 2'"}
evaluate command result with IN Clause eval expression
evalExpr := "'${0}' IN ('afpovertcp.cfg','aliases')"
shell command result passed as an arg to the following shell command; both results are evaluated against eval expression
create tow shell commands 1st command result passed as an arg to the following shell command
shCmd := []string{"ls /etc/hosts | awk -F " " '{print $1}' |awk 'FNR <= 1'",
"stat -f %A" ${0}}
both results are evaluated against eval expression 1st result is evaluated as string 2nd result is evaluated as an Integer
evalExpr := "'${0}' == '/etc/hosts'; && ${1} <= 766"
Full code example
package main
import (
"fmt"
"github.com/chen-keinan/go-command-eval/eval"
)
func main() {
shCmd := []string{"ls /etc/hosts | awk -F \" \" '{print $1}' |awk 'FNR <= 1'",
"ls /etc/group | awk -F \" \" '{print $1}' |awk 'FNR <= 1'"}
evalExpr := "'${0}' == '/etc/hosts'; && '${1}' == '/etc/group';"
cmdEvalResult := eval.NewEvalCmd().EvalCommand(shCmd, evalExpr)
if cmdEvalResult.Match {
fmt.Print("commmand result match eval expression")
}
}
code contribution is welcome contribution with passing tests and linter is more than welcome :)