如何在交互式shell中执行多个命令

时间:2019-04-02 13:06:02

标签: go interactive-shell

我的应用程序可使用从控制台提供的所有类型的Shell命令(FontAttributesFontFamilycurl等)。现在,我想使用date通过交互式shell命令(如mongo shell)来介绍这种情况。

  • 例如第一步,连接到mongodb: ping

  • 然后执行任意数量个命令,获取每一步的结果 os/exec

  • 然后 mongo --quiet --host=localhost blog

我尝试了以下操作,但是它使每个mongo连接只能执行一个命令:

db.getCollection('posts').find({status:'INACTIVE'})

有没有一种方法可以运行多个命令,从而获得每个执行命令的标准输出结果?

1 个答案:

答案 0 :(得分:1)

正如Flimzy所指出的,您绝对应该使用mongo驱动程序来与mongo一起使用,而不要尝试通过shell exec与之交互。

但是,要回答根本问题,您当然可以执行多个命令-没有理由不这样做。每次您写入流程的stdin时,就好像您在终端上键入它一样。除了专门检测是否已将它们连接到TTY的进程外,对此没有任何秘密限制。

尽管您的代码有几个问题-您绝对应该查看os/exec package documentation。您正在呼叫myString = string.Format(myString, "123", "55668878", "test address"); ,该呼叫:

  

启动指定的命令并等待其完成。

然后调用cmd.Run,该调用也将等待命令完成。即使这是一个非常序列化的过程,也要在goroutine中写入stdin管道:您想要写入管道以执行命令,获取结果,编写另一个命令,获取另一个结果...并发性只会使混乱很重要,不应该在这里使用。而且,您不会发送换行符来告诉Mongo您已经完成了编写命令的过程(就像您在Shell中所做的一样-Mongo不会在您输入结束括号后立即开始执行,而是必须按Enter键)

您要通过stdin / stdout与进程进行交互的操作(再次,请注意,这绝对不是与数据库进行交互的方式,但是可以 >对其他外部命令有效):

cmd.Wait