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

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

多串管道。

多串管道。

Go
墨色風雨 2022-07-18 17:15:35
我正在嘗試使用 Go 執行以下 shell 命令。{ echo $password; echo $password; } | kadmin.local -q 'cpw user'下面changePassword不允許我將兩個密碼都輸入kadmin.local實用程序。我有另一個實用程序,我只需要傳遞一個密碼并且此功能工作正常(如果我刪除第 3 行)// Update Passwordfunc changePassword(password string, principal string) {    cmd := exec.Command("kadmin.local", "-q", "cpw "+principal)    cmd.Stdin = strings.NewReader(password)    cmd.Stdin = strings.NewReader(password) // Remove when one password require.    var out bytes.Buffer    cmd.Stdout = &out    err := cmd.Run()    check(err)    fmt.Println(out.String())}我嘗試了其他方法https://stackoverflow.com/a/10953142/3082827但我無法弄清楚如何使這項工作。
查看完整描述

2 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

kadmin如果有密碼,程序直接從控制終端讀取密碼,而不是從標準輸入讀取。這意味著設置cmd.Stdin很可能沒有效果。幸運的是,有一個-pw選項:(是); 不幸的是,使用此選項并不安全。change_password -pw password principalcpwchange_password

那么,除了使用 之外-pw,您還有兩個選擇:

  • 提供一個偽終端的控制終端,以便您提供密碼;或者

  • 確保沒有控制終端,以便kadmin使用標準輸入。

如果你做后者,正確的發送方式cmd.Stdin是密碼重復兩次,每次最后都有一個換行符。也就是說,而不是:

cmd.Stdin = strings.NewReader(password)
cmd.Stdin = strings.NewReader(password)

(它只是創建然后丟棄一個閱讀器實例)你會想要:

cmd.Stdin = strings.NewReader(password + "\n" + password + "\n")

或類似的。


查看完整回答
反對 回復 2022-07-18
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

這對我有用。發布我的解決方案以防有人絆倒。


// Updating Password

func changePassword(password string, principal string) {

    b.Write([]byte(password + "" + password))

    var b bytes.Buffer

    b.Write([]byte(password + "\n" + password + "\n"))

    cmd.Stdin = &b

    cmd.Stdout = os.Stdout

    cmd.Stderr = os.Stderr

    err := cmd.Run()

    check(err)

}


查看完整回答
反對 回復 2022-07-18
  • 2 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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