Go語言互動執行系統命令

壹頁書發表於2015-04-17
還是那個坑爹的expect安全問題,雖然在Shell層面已經解決了
http://blog.itpub.net/29254281/viewspace-1580525/

但是使用Golang呼叫指令碼,還是出現了問題
func Backup(backupinfo *BackupInfo, backuppath *string) {
        cmdstring := "echo  '" + backupinfo.LocalAddr + " " + backupinfo.User + " " + backupinfo.Pwd + " " + backupinfo.Path + " " + *backuppath + "/" + backupinfo.LocalAddr + "' | sed 's/ /\\n/g' |" + GetCurrentPath() + "/backup.sh"                               
        cmd := exec.Command("/bin/bash","-c",cmdstring)                                                                                                            
        cmd.Run()                                                                                                      
}

使用小花狸監控執行異地備份的同時
在另外一個視窗執行命令.
ps -ef | grep backup
mysql    12069     1  0 16:44 pts/1    00:00:00 /bin/bash -c echo  '127.0.0.1 root password /home/dev/ /tmp' | sed 's/ /\n/g' |/home/dev/backup.sh

納尼,這是神馬啊...
怎麼又顯示出來了.

解決這個問題,可以使用golang互動執行的方式


修改之後,終於搞定這個問題了
func Backup(backupinfo *BackupInfo, backuppath *string) {
        cmdstring := "echo  '" + backupinfo.LocalAddr + " " + backupinfo.User + " " + backupinfo.Pwd + " " + backupinfo.Path + " " + *backuppath + "/" + backupinfo.LocalAddr + "' | sed 's/ /\\n/g' |" + GetCurrentPath() + "/backup.sh"
        in := bytes.NewBuffer(nil)
        cmd := exec.Command("/bin/bash")
        cmd.Stdin = in
        in.WriteString(cmdstring)
        cmd.Run()
}

參考:
http://blog.leanote.com/post/53075412e01c5378f2000001



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1583780/,如需轉載,請註明出處,否則將追究法律責任。

相關文章