Skip to content

Go-command-eval is an open-source which helps to execute a shell command and evaluate it results in a flexible ways

License

Notifications You must be signed in to change notification settings

chen-keinan/go-command-eval

Repository files navigation

Go Report Card License test coverage badge Gitter


cmd_eval logo

go-command-eval

Go-command-eval is an open source lib who evaluate shell command results against eval expr

Installation

go get github.com/chen-keinan/go-command-eval

Usage

one shell command with single result evaluated against eval expression

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'"

two shell commands with single result each evaluated with eval expression

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';"

shell command return two results evaluated with IN Clause eval expression

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")
	}
}

Contribution

code contribution is welcome contribution with passing tests and linter is more than welcome :)