Can';t使用Java运行bashshell

Can';t使用Java运行bashshell,java,linux,bash,unix,ubuntu,Java,Linux,Bash,Unix,Ubuntu,为什么这段代码不给我bash提示?我尝试了BufferedReaders,但没有任何帮助。我也无法在控制台中输入任何命令,如“help” “ls”和“ps”等命令工作正常 使用不正确的参数或“--help”运行bash会生成输出 以超级用户身份运行Java没有帮助 有什么想法吗 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Main {

为什么这段代码不给我bash提示?我尝试了
BufferedReader
s,但没有任何帮助。我也无法在控制台中输入任何命令,如“help”

  • “ls”和“ps”等命令工作正常
  • 使用不正确的参数或“--help”运行bash会生成输出
  • 以超级用户身份运行Java没有帮助
有什么想法吗

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class Main {
    public static void main(String[] args) {
        try {
            Process p = Runtime.getRuntime().exec("bash");
            InputStream o = p.getInputStream();
            InputStream e = p.getErrorStream();
            OutputStream i = p.getOutputStream();
            while (true) {
                if (o.available() > 0) {
                    System.out.write(o.read());
                }
                if (e.available() > 0) {
                    System.out.write(e.read());
                }
                if(System.in.available() > 0) {
                    i.write((char)System.in.read());
                }
                if(o.available() == 0 && e.available() == 0 && !p.isAlive()) {
                    return;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
为什么这段代码不给我bash提示

现在还不清楚“bash提示符”是什么意思。。。但我假设您希望在shell的标准输出/错误流中看到bash提示符字符

无论如何,原因是shell不是交互式的

bash手动条目说明:

交互式shell是一个启动时没有非选项参数且没有-c选项的shell,其标准输入和错误都连接到终端(由isatty(3)确定),或者是一个启动时没有-i选项的shell。如果bash是交互式的,则设置PS1和$-include i,允许shell脚本或启动文件测试此状态

请注意,当您在Linux/Unix上从Java启动命令时(按照您的方式),其标准I/O流将是管道,
isatty
不会将它们识别为“终端”

因此,如果要强制shell“交互”,需要在bash命令行中包含“-i”选项。例如:

Process p = Runtime.getRuntime().exec(new String[]{"bash", "-i"});

@azbarcea-无需假设/假设。这个问题被标记为“linux”、“unix”和“ubuntu”。