问题描述
go exec 在执行命令时会将命令转换为字符串去执行。
比如 exec.Command("rm", "-rf", "/*")
。
实际执行的是 rm -rf "/*"
通配符路径被作为字符串处理,系统回报找不到该文件或目录的错误,类比到其他命令也是一样的。
解决方案
方案一(不推荐)
有本事还不嫌麻烦的可以自己实现通配符逻辑。
方案二(推荐)
模拟 linux terminal 执行命令,看代码
path := "/*"
exec.Command("/bin/bash", "-c", fmt.Sprintf("rm -rf %s", path))
// 下边就是运行代码获取 stdout stderr 处理错误返回结果
// 记不清了,有几种实现方式,自己动动小手查一下