我正在使用 go 來使用 exec.command 運行一個 shell 腳本,如下所示,我想使用命令行 say 獲取輸入參數,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 回答

FFIVE
TA貢獻1797條經驗 獲得超6個贊
您需要exec
相應地格式化 -command 字符串。
社會:
fmt.Sprintf("awk '{print $%d/1024}'", i)
這給出了:awk '{print $1/1024}'
對于i = 1
和awk '{print $2/1024}'
對于i = 2
fmt.Sprintf
接受一個格式字符串和傳遞給這個字符串的參數,并返回格式化的字符串。( https://golang.org/pkg/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()
您也許應該嘗試更多地反匯編您的命令以進行維護,但這不是問題的一部分。
- 1 回答
- 0 關注
- 182 瀏覽
添加回答
舉報
0/150
提交
取消