4 回答

TA貢獻1757條經驗 獲得超7個贊
os/exec包幫助你在 Go 中執行終端命令。
執行系統命令非常簡單。Cmd 保存您的外部命令。
所以在 linux 中假設你想運行“echo hello”命令,你會寫下面的代碼。
cmdStruct := exec.Command("echo","hello")
out,err := cmdStruct.Output()
if err != nil {
fmt.Println(err)
}
fmt.Println(string(out))
這是最基本的方法之一。但是,在 Windows 中,您需要將“echo hello”作為參數傳遞給命令提示符或 Powershell。
cmdStruct:= exec.Command("cmd.exe","/c","echo","hello")
為了簡化單個切片中的傳遞參數,
args:= strings.Split("/c echo hello there how are you"," ")
cmdStruct:= exec.Command("cmd.exe",args...)
查看此答案以獲得更好的理解和此代碼的增強版本。
對于 cd,您可以使用os.Chdir()和os.Getwd()分別更改和查看您的工作目錄。但是如果你需要你的命令在特定目錄中執行,你可以設置Dir你的命令,即
cmdStruct.Dir = "path/to/directory"
或者
cmdStruct.Dir = filepath.Join("path","to","directory")

TA貢獻1827條經驗 獲得超8個贊
cd 不是外部程序。
命令行解釋器有一個抽象“當前目錄”,它影響所有其他命令。它是一個狀態
例如,它用于處理相對路徑。
如果您想從頭開始創建 CLI,則必須定義此階段如何影響一切。
如果您需要與現有 CLI 進行交互,則需要在操作系統進程中啟動它并通過流進行交互。
有3個流:
STDIN - 輸入 STDOUT - 輸出 STDERR - 錯誤
您需要捕獲用戶命令并發送到 CLI 的 STDIN。并讀取 STDIN / STDOUT 以寫入響應。
例如,這與 goroutines 有關

TA貢獻1873條經驗 獲得超9個贊
盡管我問這個問題已經有一段時間了,但我認為回答這個問題會很好。簡單來說,沒有辦法。程序基本上在它們自己的小盒子上運行,這意味著雖然 os.Chdir() 確實在技術上改變了工作目錄,但它之后“恢復”。
- 4 回答
- 0 關注
- 208 瀏覽
添加回答
舉報