我正在尝试自动化一个过程,该过程使用 sh 脚本包装的 java 程序创建二进制响应文件(这有很多问题,但不是我的代码)。我想要的结果需要在运行 sh 脚本时在第一个提示中按 [enter],在第二个提示中按“Y”[enter]。
我使用以下代码让它在一台 Linux 机器上工作:
echo Y > ans; ./script < ans `echo -e \\\r`
在另一个 Linux 机器上,它不起作用(脚本再次进入无限循环,不是我的代码)。两个机器都运行相同的内核和版本。
我确信有更优雅、更直接的方法可以做到这一点。但是,我需要它始终如一地工作。我不相信这不是其中一个盒子的设置方式。
答案1
尝试一个简单的expect
脚本:
#!/usr/bin/expect 设置超时20 生成 /path/to/your/java/shell/script/thing.sh 期待“FirstPrompt:”{发送“\r”} 期待“SecondPrompt:”{发送“Y”} 相互影响
...FirstPrompt
第一个提示的文本在哪里(因此,如果您的 shell 脚本提示“请按 ENTER”,那么您需要逐字提示,我在示例脚本中写了“FirstPrompt:” expect
),而 SecondPrompt 是第二个提示,逐字逐句。
...我还假设expect
已安装,并且位于/usr/bin/expect
您的系统上。如果不是这种情况,请安装它,并使用正确的路径。