2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
從手冊(cè)頁(yè)which
:
這需要一個(gè)或多個(gè)參數(shù)。對(duì)于它的每個(gè)參數(shù),它將在 shell 提示符下輸入該參數(shù)時(shí)將執(zhí)行的可執(zhí)行文件的完整路徑打印到標(biāo)準(zhǔn)輸出。它通過(guò)使用與 bash(1) 相同的算法在環(huán)境變量 PATH 中列出的目錄中搜索可執(zhí)行文件或腳本來(lái)執(zhí)行此操作。
Go 的os/exec.LookPath
功能非常接近這個(gè)功能:
LookPath 在 PATH 環(huán)境變量命名的目錄中搜索名為文件的可執(zhí)行文件。如果文件包含斜線,則直接嘗試,不查詢 PATH。結(jié)果可能是絕對(duì)路徑或相對(duì)于當(dāng)前目錄的路徑。
path/filepath.Abs
如果您需要有保證的絕對(duì)路徑,請(qǐng)使用。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
我不希望這是最好的答案,但這是我剛剛找到的答案。我希望有更多特定于 go 的類型,但與此同時(shí), linux 中的類型是 bash 和 sh(alpine)中可用的默認(rèn)內(nèi)置類型。
type type
您可以通過(guò)運(yùn)行which yields來(lái)自己測(cè)試:
type 是一個(gè)內(nèi)置的 shell
中的用法go
如下所示:
b, err := exec.Command("type", "go").Output()
if err != nil {
? ? /* 'type' is not available on the O/S */
}
goPath := strings.TrimPrefix(strings.TrimSuffix(string(b), "\n"), "go is ")
需要這些函數(shù)的原因Trim
是因?yàn)檩敵隹雌饋?lái)像這樣:
go 是 /usr/local/go/bin/go\n
這不是最好的方法,但它確實(shí)有效。
- 2 回答
- 0 關(guān)注
- 148 瀏覽
添加回答
舉報(bào)