標準入力および出力ストリームを使用して外部プロセスを実行するとRuntime.exec()
、Java プログラムを実行している端末に接続されません。シェルリダイレクトを使用して接続できますが、最初に使用する端末を知る必要があります。標準 API を使用して端末を見つける方法はありませんが、おそらくそれを行うオープン ソース ライブラリを見つけることができます。
実行できることを確認するために、このプログラムは次の場所で開きますless
。
public class Test {
public static void main(String[] args) throws Exception {
Process p = Runtime.getRuntime().exec(
new String[] {"sh", "-c",
"less Test.java < "+args[0] + " > "+args[0]});
System.out.println("=> "+p.waitFor());
}
}
それを実行するには、を使用する必要がありますjava Test $(tty)
。tty
プログラムは、stdin に接続されている端末の名前を表示します。
このソリューションの移植性についてはよくわかりません。少なくとも Linux では動作します。