【问题标题】:Executing command line, cd doesn't work执行命令行,cd不起作用
【发布时间】:2015-11-07 21:28:38
【问题描述】:

我正在尝试使用

执行 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。我想我需要以某种方式捕获该外壳并对其进行维护,直到用户关闭应用程序为止。

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

【问题讨论】:

  • 您还没有在这里描述“不起作用”的含义。它会抛出异常吗?由于cd 命令在成功时不输出任何内容(与ls 不同),你怎么知道它失败了?另外-您要更改到哪个目录? Android 对允许应用访问的目录有很多限制。
  • 我已经更新了答案。如果我尝试 cd 到一个不存在的目录,它也不会给我任何错误。知道为什么我没有收到错误消息吗?

标签: android command-line terminal


【解决方案1】:

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

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

我的输出中没有任何错误

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

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

sh -c 'cd /;pwd'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多