我正在使用 Go 模塊呼叫 kubectl,如下所示:
getNsCmd := cmd.NewCmd("kubectl", "--kubeconfig", "~/.kube/<kube-config-file>", "get", "ns")
如果我這樣設定路徑,它會起作用:
getNsCmd := cmd.NewCmd("kubectl", "--kubeconfig", "../../../../.kube/<kube-config-file>", "get", "ns")
我正在使用Go cmd 包
目前這個模塊存在于另一個倉庫中,這就是為什么它必須向上導航四個級別。我認為這是因為該命令是從該檔案的角度運行的,但似乎并非必須如此。如果將其作為 cli 命令運行很簡單,那么第一個(我認為)應該可以作業。
當我從 cli 手動運行此命令時,它作業得很好:
kubectl --kubeconfig ~/.kube/<kube-config-file> get ns
uj5u.com熱心網友回復:
用作~快捷方式是bash 特有的。 ~只是抓取用戶的 $HOME 目錄,但不適用于 shell 的所有實作。這是可以從終端使用的東西,但并不總是從代碼中使用(它不是獨立于 shell 的)。但是,go 也可以使用os.UserHomeDir().
https://pkg.go.dev/os#UserHomeDir
像這樣的東西應該作業
package main
import (
"fmt"
"os"
)
func main() {
homeDir, _ := os.UserHomeDir()
fmt.Printf("%s/.kube/<kube-config-file>", homeDir)
}
輸出:/root/.kube/<kube-config-file>
uj5u.com熱心網友回復:
由于您使用的包提到它包裝了 Go 的包,這里是他們檔案os/exec的摘錄:
與來自 C 和其他語言的“系統”庫呼叫不同,os/exec 包有意不呼叫系統 shell,也不擴展任何 glob 模式或處理通常由 shell 完成的其他擴展、管道或重定向。該包的行為更像 C 的“exec”函式系列。要擴展 glob 模式,可以直接呼叫 shell,注意轉義任何危險的輸入,或者使用 path/filepath 包的 Glob 函式。要擴展環境變數,請使用包 os 的 ExpandEnv。
所以我想你會想嘗試這樣的事情:
import "os"
getNsCmd := cmd.NewCmd("kubectl", "--kubeconfig", os.ExpandEnv("$HOME/.kube/<kube-config-file>"), "get", "ns")
uj5u.com熱心網友回復:
正如其他人提到的那樣,我需要獲取主目錄環境變數。但是我是這樣實作的:
homePath, _ := os.LookupEnv("HOME")
//
getNsCmd := cmd.NewCmd("kubectl", "--kubeconfig", homePath "/.kube/<kube-config-file>", "get", "ns")
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/468232.html
標籤:去 Kubernetes
