Can';t使用Java运行bashshell
为什么这段代码不给我bash提示?我尝试了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 {
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”。