【发布时间】:2016-12-18 05:31:09
【问题描述】:
这是一台Linux机器,下面的代码没有任何输出,我很好奇为什么。 附言- 我没有读到需要转义的波浪号,但无论如何用反斜杠转义了波浪号,javac 指出了语法错误。
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
class Run {
public static void main(String args[]) throws IOException {
Process p = Runtime.getRuntime().exec("ls ~");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
【问题讨论】:
-
~被 shell 插值。 -
Process process = Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", "ls ~"});调用您的 shell 并扩展~,然后将其传递给ls。 -
另请参阅When Runtime.exec() won't,了解有关正确创建和处理流程的许多好技巧。然后忽略它引用
exec并使用ProcessBuilder来创建进程。还将String arg拆分为String[] args以解决包含空格字符的路径之类的问题。
标签: java process runtime.exec