![](/img/trans.png)
[英]Why can't I get Java ProcessBuilder to execute in my windows 10 computer?
[英]Why can't I start `bash -i` using ProcessBuilder in Java?
我正在嘗試從Java應用程序運行命令bash -i
,因為我希望用戶能夠在某些工作中使用外殼程序,然后返回Java應用程序。
我有以下測試代碼:
import java.io.*;
public class exec {
public static void main(String[] args) throws IOException, InterruptedException {
ProcessBuilder b = new ProcessBuilder(args);
b.redirectError(ProcessBuilder.Redirect.INHERIT);
Process p = b.start();
InputStream pout = p.getInputStream();
PrintWriter pin = new PrintWriter(p.getOutputStream());
Thread in = new Thread(() -> {
while (true) {
try {
int i = System.in.read();
if (i == -1) break;
pin.write(i);
pin.flush();
} catch (IOException e) {
e.printStackTrace();
break;
}
}
System.err.println("in finished");
});
Thread out = new Thread(() -> {
while (true) {
try {
int i = pout.read();
if (i == -1) break;
System.out.write(i);
} catch (IOException e) {
e.printStackTrace();
break;
}
}
System.err.println("out finished");
});
out.start();
in.start();
p.waitFor();
}
}
編譯后,一切正常。 我什至可以啟動bash
shell:
$ java exec date
ti 21.3.2017 19.03.25 +0200
out finished
^C$ java exec bash
date
ti 21.3.2017 19.03.30 +0200
^Cout finished
但是,當我嘗試啟動bash -i
shell時,終端的行為開始異常。
$ java exec bash -i
[1] + Stopped (tty input) java exec bash -i
$ user@computer:/tmp$ fg
java exec bash -i
date
date
ti 21.3.2017 19.05.21 +0200
user@computer:/tmp$ pwd
pwd
[1] + Stopped (tty input) java exec bash -i
Java進程停止,外殼是sh
再次,我想。 寫完fg
, date
命令可以工作一次,但是當我嘗試pwd
時,Java再次停止了。
有什么辦法可以使它正常工作嗎? 我想要的是從Java程序啟動正常的交互式bash提示。
看來ProcessBuilder
方法inheritIO
我的要求。
ProcessBuilder b = new ProcessBuilder(args);
b.inheritIO();
Process p = b.start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.