我正在使用go来使用exec.command来运行shell脚本,如下所示,我想使用命令行说i
作为输入参数,我的输出应基于i
,我会那样做吗?
i := os.Args[1:2]
out, err := exec.Command("bash", "-c", "tail -n 1 /var/log/apache2/access.log | awk '{print $i/1024}' >> mem_usage.csv").Output()
if err != nil {
fmt.Println(err.Error())
return
}
如何在shell脚本中使用我?
在没有i
的情况下,它可以正常工作,即,如果我放置$1
或$2
,则可以很好地工作,但是我希望用户给我i
的位置,然后据此进行计算。
答案 0 :(得分:2)
您需要相应地格式化exec
-命令字符串。
所以:
fmt.Sprintf("awk '{print $%d/1024}'", i)
这给出:awk '{print $1/1024}'
的{{1}}和i = 1
的{{1}}
awk '{print $2/1024}'
接受格式字符串,并将参数传递给该字符串,然后返回格式化的字符串。 (https://golang.org/pkg/fmt/#Sprintf)
这需要插入您的i = 2
-命令中:
fmt.Sprintf
您可能应该尝试多分解一些命令以提高可维护性,但这不是问题的一部分。