执行命令行,cd不起作用

时间:2015-11-07 21:28:39

标签: android command-line terminal

我尝试使用

执行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,然后维护它直到用户关闭应用程序。

不仅如此,我的输出中没有出现任何错误。例如。当我发出一个不存在的命令时,我没有收到错误信息。

1 个答案:

答案 0 :(得分:1)

  

我每次都读Runtime.getRuntime()。exec(command);执行,   它会创建一个新的shell。

这是正确的。当您为每个命令调用Runtime.exec()时,您正在创建一个新进程。每个进程都有自己的环境,包括一个不影响父进程(您的应用程序)的单独工作目录,或者您之后创建的任何其他进程。

  

我的输出中没有出现任何错误

您不会收到任何错误,因为shell命令无法执行。这些命令只返回一个状态代码,指示进程终止时的成功或失败 - 代码可以通过Process.exitValue()获得 - 但请确保该进程首先使用Process.waitFor()完成。

如果要执行多个命令,可以使用exec()启动shell可执行文件,然后通过输入和输出流编写命令和读取回复,或者只使用分号将所有命令连接在一起并执行它们直接使用命令行,如:

sh -c 'cd /;pwd'