亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以編程方式可靠地檢索容器中 go 可執行文件的路徑,而無需使用 Go

以編程方式可靠地檢索容器中 go 可執行文件的路徑,而無需使用 Go

Go
Qyouu 2023-06-12 15:21:08
如何go在沒有which 編程方式的容器中檢索二進制文件的路徑?一種選擇是which go按如下方式執行:bytes, err := exec.Command("which", "go").Output()但是,我不想依賴于which可用。go 是否提供任何內置機制來檢索它,如果沒有,除了讓用戶自己傳遞路徑之外還有什么選擇?
查看完整描述

2 回答

?
慕后森

TA貢獻1802條經驗 獲得超5個贊

從手冊頁which

這需要一個或多個參數。對于它的每個參數,它將在 shell 提示符下輸入該參數時將執行的可執行文件的完整路徑打印到標準輸出。它通過使用與 bash(1) 相同的算法在環境變量 PATH 中列出的目錄中搜索可執行文件或腳本來執行此操作。

Go 的os/exec.LookPath功能非常接近這個功能:

LookPath 在 PATH 環境變量命名的目錄中搜索名為文件的可執行文件。如果文件包含斜線,則直接嘗試,不查詢 PATH。結果可能是絕對路徑或相對于當前目錄的路徑。

path/filepath.Abs如果您需要有保證的絕對路徑,請使用。


查看完整回答
反對 回復 2023-06-12
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

我不希望這是最好的答案,但這是我剛剛找到的答案。我希望有更多特定于 go 的類型,但與此同時, linux 中的類型是 bash 和 sh(alpine)中可用的默認內置類型。

type type您可以通過運行which yields來自己測試:

type 是一個內置的 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 ")

需要這些函數的原因Trim是因為輸出看起來像這樣:

go 是 /usr/local/go/bin/go\n

這不是最好的方法,但它確實有效。


查看完整回答
反對 回復 2023-06-12
  • 2 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號