为了账号安全,请及时绑定邮箱和手机立即绑定

从 Golang 执行 Bash 脚本

从 Golang 执行 Bash 脚本

Go
慕神8447489 2021-08-16 18:35:25
我试图找出一种从 Golang 执行脚本 (.sh) 文件的方法。我找到了几种简单的方法来执行命令(例如 os/exec),但我想要做的是执行整个 sh 文件(文件设置变量等)。为此使用标准的 os/exec 方法似乎并不简单:尝试输入“./script.sh”和将脚本内容加载到字符串中都不能作为 exec 函数的参数。例如,这是我想从 Go 执行的 sh 文件:OIFS=$IFS;IFS=",";# fill in your details heredbname=testDBhost=localhost:27017collection=testCollectionexportTo=../csv/# get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keyskeys=`mongo "$host/$dbname" --eval "rs.slaveOk();var keys = []; for(var key in db.$collection.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`;# now use mongoexport with the set of keys to export the collection to csvmongoexport --host $host -d $dbname -c $collection --fields "$keys" --csv --out $exportTo$dbname.$collection.csv;IFS=$OIFS;来自 Go 程序:out, err := exec.Command(mongoToCsvSH).Output()    if err != nil {        log.Fatal(err)    }    fmt.Printf("output is %s\n", out)其中 mongoToCsvSH 可以是 sh 的路径或实际内容 - 两者都不起作用。任何想法如何实现这一目标?
查看完整描述

3 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

为了让您的 shell 脚本可以直接运行,您必须:

  1. #!/bin/sh(或#!/bin/bash等)开头。

  2. 你必须让它可执行,也就是chmod +x script.

如果您不想这样做,则必须/bin/sh使用脚本的路径执行。

cmd := exec.Command("/bin/sh", mongoToCsvSH)


查看完整回答
反对 回复 2021-08-16
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您需要执行/bin/sh并将脚本本身作为参数传递。


查看完整回答
反对 回复 2021-08-16
  • 3 回答
  • 0 关注
  • 322 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信