我尝试使用
执行cd
try {
Process process = Runtime.getRuntime().exec(command);
BufferedReader stream = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = stream.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append('\n');
}
stream = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while ((line = stream.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append('\n');
}
} catch (IOException e) {
e.printStackTrace();
}
ls
有效。但是cd dir
不起作用。它不会改变目录。如果我执行pwd
,它仍会显示/
。我读到每次执行Runtime.getRuntime().exec(command);
时,它都会创建一个新的shell。我想我需要捕获一些shell,然后维护它直到用户关闭应用程序。
不仅如此,我的输出中没有出现任何错误。例如。当我发出一个不存在的命令时,我没有收到错误信息。
答案 0 :(得分:1)
我每次都读Runtime.getRuntime()。exec(command);执行, 它会创建一个新的shell。
这是正确的。当您为每个命令调用Runtime.exec()
时,您正在创建一个新进程。每个进程都有自己的环境,包括一个不影响父进程(您的应用程序)的单独工作目录,或者您之后创建的任何其他进程。
我的输出中没有出现任何错误
您不会收到任何错误,因为shell命令无法执行。这些命令只返回一个状态代码,指示进程终止时的成功或失败 - 代码可以通过Process.exitValue()
获得 - 但请确保该进程首先使用Process.waitFor()
完成。
如果要执行多个命令,可以使用exec()
启动shell可执行文件,然后通过输入和输出流编写命令和读取回复,或者只使用分号将所有命令连接在一起并执行它们直接使用命令行,如:
sh -c 'cd /;pwd'