使用golang将命令行中的输入读取到shell脚本exec中
我正在使用下面的exec.command运行一个shell脚本,我想使用命令行获取一个输入参数,比如说使用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
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}'
fori=1
和awk'{print$2/1024}'
fori=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
进行追加。