使用golang将命令行中的输入读取到shell脚本exec中

使用golang将命令行中的输入读取到shell脚本exec中,shell,go,pipe,Shell,Go,Pipe,我正在使用下面的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.Pri

我正在使用下面的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


没有
i
它工作正常,即如果我放入
$1
$2
它工作正常,但我希望用户给我
i
的位置,然后进行相应的计算。

您需要相应地格式化
exec
-命令字符串

因此,即:

fmt.Sprintf(“awk'{print$%d/1024}',i)

这就给出了:
awk'{print$1/1024}'
for
i=1
awk'{print$2/1024}'
for
i=2

fmt.Sprintf
获取格式字符串和要传递到此字符串的参数,并返回格式字符串。()

这需要插入到
exec
-命令中:

i := 2
awkPart := fmt.Sprintf("awk '{print $%d/1024}'", i)
out, err := exec.Command("bash", "-c", "tail -n 1 /var/log/apache2/access.log | "+awkPart+" | tee -a mem_usage.csv").Output()

为了便于维护,您可能应该尝试对命令进行更多的反汇编,但这不是问题的一部分。

我不明白它是如何工作的,我们必须将第一部分输出传输到awk,当我执行您所说的操作时,它显示出错误语法错误:意外的awk,期待逗号或)你能再详细一点吗?无效字符文字(多个字符)@mstruebing是否确定设置了
i
?谢谢,先生,但它会覆盖文件,因为您已删除脚本中的'>>'。然后使用
tee-a
进行追加。