我有一个要运行的命令,我们称之为program
。它是一个类似于 bash 或 python REPL 的交互式程序。
我想用一些预定义的输入来启动这个程序。我试过program << "some_commands"
。但执行完成后some_commands
,我无法继续手动交互。
如果这个程序是 bash 我会用于.bashrc
此目的。
使用具有预定义启动输入的此类程序的正确方法是什么?
答案1
您也可以在不使用 Expect 的情况下执行此操作:
{ echo foo ; cat ; } | command
答案2
expect
是这项工作的工具:
#!/usr/bin/expect -f
spawn program
expect "I'm ready for input"
send "command 1\r"
expect "I'm ready for input"
send "command 2\r"
# ...
send "command last\r"
interact
该interact
命令将控制权返回给用户。
答案3
您可以使用回卷与您的程序进行交互。 Rlwrap 提供了一个基于 readline 库的行编辑器,与 bash 使用的相同。这通常不如提供行编辑器的程序所提供的行编辑器(例如,您不会获得任何语法着色或完成),但它比仅理解退格键的默认终端界面要好得多。
rlwrap -P 'some_commands' program
文本被传递到输入缓冲区,但不会发送到程序,因此您必须Enter在启动程序后按 键。整个文本作为单个字符串传递。它可以包含换行符。