2015-12-11 41 views
2

我試圖找出是否存在Linux上的程序,我發現這個article執行內置命令在Linux。我嘗試從我的go程序執行這個操作,它一直給我一個錯誤,說它不能在我的$ PATH中找到「command」,這是可以預料的,因爲它是一個內置的linux命令而不是二進制文件。所以我的問題是如何在go程序中執行內置的linux命令?如何golang

exec.Command("command", "-v", "foo") 

錯誤:EXEC: 「命令」:$ PATH中找不到可執行文件

回答

4

就這樣文章說, 「命令」 是一個shell內置。您可以通過exec.LookPath在本地執行此操作。

如果必須,您可以使用該系統which二進制,或者您也可以從外殼內執行command

exec.Command("/bin/bash", "-c", "command -v foo") 
+0

我明白了。感謝您的解決方案。 – Konoha

+0

對於bash用戶,'type'優於'which'(後者是一個腳本)。 –

+0

另外請注意,今年bash有一個嚴重的安全漏洞,雖然這已被修復。但是,如果您有選擇,所有服務器端腳本都使用默認shell'sh'(通常是Dash)。 –

1

或者,如果它是一個內置的命令,這並不需要你的參數可以這樣做以下:

package main 

import (
    "fmt" 
    "log" 
    "os/exec" 
) 

func main() { 
    out, err := exec.Command("uuidgen").Output() 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("%s", out) 
} 

這將打印出類似以下的唯一ID:4cdb277e-3c25-48ef-A367-ba734ce407c1就像直接在命令行調用它。