jlaskey@3: /* jlaskey@7: * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. jlaskey@3: * jlaskey@3: * Redistribution and use in source and binary forms, with or without jlaskey@3: * modification, are permitted provided that the following conditions jlaskey@3: * are met: jlaskey@3: * jlaskey@3: * - Redistributions of source code must retain the above copyright jlaskey@3: * notice, this list of conditions and the following disclaimer. jlaskey@3: * jlaskey@3: * - Redistributions in binary form must reproduce the above copyright jlaskey@3: * notice, this list of conditions and the following disclaimer in the jlaskey@3: * documentation and/or other materials provided with the distribution. jlaskey@3: * jlaskey@3: * - Neither the name of Oracle nor the names of its jlaskey@3: * contributors may be used to endorse or promote products derived jlaskey@3: * from this software without specific prior written permission. jlaskey@3: * jlaskey@3: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS jlaskey@3: * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, jlaskey@3: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR jlaskey@3: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR jlaskey@3: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, jlaskey@3: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, jlaskey@3: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR jlaskey@3: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF jlaskey@3: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING jlaskey@3: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS jlaskey@3: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. jlaskey@3: */ jlaskey@3: jlaskey@3: /** jlaskey@3: * This is a simple shell tool in JavaScript. jlaskey@3: * jlaskey@3: * Runs any operating system command using Java "exec". When "eval" command is jlaskey@3: * used, evaluates argument(s) as JavaScript code. jlaskey@3: */ jlaskey@3: jlaskey@3: var imports = new JavaImporter(java.io, java.lang, java.util); jlaskey@3: jlaskey@3: function prompt() { jlaskey@3: java.lang.System.out.print(">"); jlaskey@3: } jlaskey@3: jlaskey@3: with (imports) { jlaskey@3: var reader = new BufferedReader(new InputStreamReader(System["in"])); jlaskey@3: var line = null; jlaskey@3: prompt(); jlaskey@3: while ((line = reader.readLine()) != null) { jlaskey@3: if (line != "") { jlaskey@3: var args = line.split(" "); jlaskey@3: try { jlaskey@3: if (args[0] == "eval") { jlaskey@3: var code = line.substring("eval".length); jlaskey@3: var res = eval(code); jlaskey@3: if (res != undefined) { jlaskey@3: print(res); jlaskey@3: } jlaskey@3: } else { jlaskey@3: var argList = new ArrayList(); jlaskey@3: for (i in args) { argList.add(args[i]); } jlaskey@3: var procBuilder = new ProcessBuilder(argList); jlaskey@3: procBuilder.redirectErrorStream(); jlaskey@3: var proc = procBuilder.start(); jlaskey@3: var out = new BufferedReader(new InputStreamReader(proc.getInputStream())); jlaskey@3: var line = null; jlaskey@3: while ((line = out.readLine()) != null) { jlaskey@3: System.out.println(line); jlaskey@3: } jlaskey@3: proc.waitFor(); jlaskey@3: } jlaskey@3: } catch (e) { jlaskey@3: print(e); jlaskey@3: } jlaskey@3: } jlaskey@3: prompt(); jlaskey@3: } jlaskey@3: }