使用golang

时间:2019-05-28 09:19:42

标签: shell go pipe

我正在使用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的位置,然后据此进行计算。

1 个答案:

答案 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

您可能应该尝试多分解一些命令以提高可维护性,但这不是问题的一部分。