以编程方式从Bash发送命令到交互式REPL?

时间:2016-06-07 01:49:54

标签: bash shell unix process read-eval-print-loop

是否可以以编程方式输入一些repl(比如说mongo),并以编程方式与它进行交互?也就是说,你能以编程方式做到这一点:

$ mongo
MongoDB shell version: 2.4.8
connecting to: test
> db.collections
test.collections
> exit
bye

所有这一切都是:

  1. 使用mongo命令登录REPL。我知道有可能以某种方式做到这一点,我已经看到它已经完成create interactive REPL's in the Node.js world。了解如何直接在bash中执行此操作会很有帮助。
  2. 登录后,我输入了db.collections,只是探索了REPL。这个问题是问,你能以编程方式这个吗?或许你可以(a)从bash脚本创建子进程/ REPL,然后(b)发送它评估的db.collections这样的任意消息。 (你可以得到回复/输出)。
  3. 以编程方式注销REPL。
  4. 这可能吗?

1 个答案:

答案 0 :(得分:1)

您可以编写一个expect脚本,它将以交互方式为您输入这些命令。我不是一个普通的期望用户,但我认为它应该是这样的:

#!/usr/bin/expect
mongo
set timeout 10
expect "MongoDB shell version: 2.4.8"
send "db.collections"
expect "test.collections"
send exit

有很多例子可以让你轻松创建一个最小的工作示例。