//bin/cat &>/dev/null <<'EOF' /* This mess is a trick to start a shell script inside a valid java comment. EOF mkdir -p /tmp/xapi # grab a safe place to work cp $0 /tmp/xapi # copy this file there cd /tmp/xapi # go to tmp dir #rotate logs rm -f logOut.1 logErr.1 mv logOut logOut.1 &>/dev/null mv logErr logErr.1 &>/dev/null touch logOut logErr #compile self javac `basename $0` tail -f logOut & tail -f logErr & java Xapi $@ | sh 1>out 2>err (jobs -p | xargs kill -9) &>/dev/null exit */ import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Paths; class Xapi { public static void main(String ... args) throws Throwable{ PrintStream run = System.out; // runs shell commands PrintStream log = System.err; // our log try { System.out.println("which mvn"); String out = new String(Files.readAllBytes(Paths.get("out"))); System.err.print("read from stdId: " + out); // Replace the real stdOut with a print stream that logs to a file PrintStream o = new PrintStream("logOut"); System.setOut(o); // o = new PrintStream("logErr"); System.setErr(o); System.err.println("to err"); System.out.println("to out"); } finally { run.println("exit"); } } }