From cc8d14eb74e8924ef18a853d573ef8f86a300cdc Mon Sep 17 00:00:00 2001 From: chrisinmtown Date: Thu, 11 Feb 2016 08:27:15 -0500 Subject: [PATCH] Create ShellExample.java This is a SSCE for using Expect to interact with the bash shell. It demonstrates handling stdout/stderr together and matching newlines in output. --- ShellExample.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 ShellExample.java diff --git a/ShellExample.java b/ShellExample.java new file mode 100644 index 0000000..b2d582f --- /dev/null +++ b/ShellExample.java @@ -0,0 +1,29 @@ +package ronnie_dong_expect_for_java; + +import java.util.regex.Pattern; + +/** + * Demonstrates calling bash from Java using Expect-for-java from ronniedong + */ +public class ShellExample { + public static void main(String[] args) throws Exception { + ProcessBuilder builder = new ProcessBuilder("bash"); + builder.redirectErrorStream(true); + Process shell = builder.start(); + Expect expect = new Expect(shell.getInputStream(), shell.getOutputStream()); + String [] cmds = { "pwd", "ls", "exit" }; + // Consume all output by allowing . to match newline + Object [] anyPat = new Object[] { Pattern.compile(".+", Pattern.DOTALL)}; + for (String cmd : cmds) { + System.out.println("Sending '" + cmd + "'"); + expect.send(cmd + "\n"); + int rc = expect.expect(1, anyPat); + if (Expect.RETV_TIMEOUT == rc) + System.out.println("Timeout"); + else + System.out.println("rc=" + rc + ", match=>" + expect.match + "<"); + } + expect.close(); + shell.destroy(); + } +}