首页 > 密码编程 >正文

Go语言交互执行系统命令

还是那个坑爹的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

Go语言交互执行系统命令