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

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

你如何從 Golang 執行終端命令?

你如何從 Golang 執行終端命令?

Go
蝴蝶刀刀 2022-11-28 10:19:50
我正在 Golang 中創建一個 CLI 工具,我對 Golang 和為終端制作工具都是新手。我需要直接從我的程序(特別是cd)執行終端命令。我該怎么做呢?我跟著這篇文章,但它拋出了一個錯誤,說在 %path% 中找不到回聲在此先感謝您的幫助!
查看完整描述

4 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

cd通過調用os.Chdir來實現命令。

由于子進程無法更改父進程的工作目錄,因此該cd命令沒有單獨的可執行文件。該cd命令內置于命令行解釋器。


查看完整回答
反對 回復 2022-11-28
?
長風秋雁

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")


查看完整回答
反對 回復 2022-11-28
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

cd 不是外部程序。

命令行解釋器有一個抽象“當前目錄”,它影響所有其他命令。它是一個狀態

例如,它用于處理相對路徑。

如果您想從頭開始創建 CLI,則必須定義此階段如何影響一切。

如果您需要與現有 CLI 進行交互,則需要在操作系統進程中啟動它并通過流進行交互。

有3個流:

STDIN - 輸入 STDOUT - 輸出 STDERR - 錯誤

您需要捕獲用戶命令并發送到 CLI 的 STDIN。并讀取 STDIN / STDOUT 以寫入響應。

例如,這與 goroutines 有關


查看完整回答
反對 回復 2022-11-28
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

盡管我問這個問題已經有一段時間了,但我認為回答這個問題會很好。簡單來說,沒有辦法。程序基本上在它們自己的小盒子上運行,這意味著雖然 os.Chdir() 確實在技術上改變了工作目錄,但它之后“恢復”。



查看完整回答
反對 回復 2022-11-28
  • 4 回答
  • 0 關注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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