2 回答

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
使用此腳本作為 acme.sh
#!/bin/bash
echo "$*"
使用同一目錄中給出的程序會(huì)發(fā)生您報(bào)告的錯(cuò)誤
但是,如果我將當(dāng)前目錄添加到 shell PATH
export PATH=.:$PATH
然后程序按預(yù)期執(zhí)行,就我的版本而言
$ go run c.go?
combined out:
--issue --dns -d exmaple.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
好的,這就是 bash -c 將單個(gè)字符串作為命令的情況(稍后會(huì)詳細(xì)介紹)
如果命令是這樣發(fā)出的
? ? cmd := exec.Command("acme.sh", "--issue", "--dns", "-d exmaple.com", "--
yes-I-know-dns-manual-mode-enough-go-ahead-please")
然后,當(dāng)稍后對(duì)您的問(wèn)題狀態(tài)進(jìn)行編輯時(shí),命令 acme.sh 將在沒(méi)有參數(shù)的情況下運(yùn)行。
問(wèn)題在于行為方式bash -c。
從手冊(cè)頁(yè)
bash 在調(diào)用時(shí)解釋以下選項(xiàng):
? ?-c? ? ? ? If the -c option is present, then commands are read from? the
? ? ? ? ? ? ?first non-option argument command_string.? If there are argu‐
? ? ? ? ? ? ?ments after the command_string,? they? are? assigned? to? the
? ? ? ? ? ? ?positional parameters, starting with $0.
在您的情況下,這意味著第一個(gè)參數(shù)bash -c
被接受為命令。其他參數(shù)丟失,因?yàn)樗鼈兪切?bash shell 而不是命令的位置acme.sh
參數(shù)
,確保腳本有正確的 bang 行并依賴內(nèi)核 binfmt 處理程序

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
從 err 中排除exit status 1將得到正確的結(jié)果。
cmd := exec.Command("bash", "-c", "acme.sh --issue --dns -d exmaple.com --yes-I-know-dns-manual-mode-enough-go-ahead-please");
out, err := cmd.CombinedOutput()
if err != nil && err.Error() != "exit status 1" {
log.Fatalf("issue failed with error: %s\n", err)
}
fmt.Printf("combined out:\n%s\n", string(out))
- 2 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報(bào)