【发布时间】:2015-10-24 22:13:12
【问题描述】:
当我尝试运行Runtime.exec(String) 时,某些命令可以工作,而其他命令会执行但失败或执行与我的终端不同的操作。下面是一个独立的测试用例来演示效果:
public class ExecTest {
static void exec(String cmd) throws Exception {
Process p = Runtime.getRuntime().exec(cmd);
int i;
while( (i=p.getInputStream().read()) != -1) {
System.out.write(i);
}
while( (i=p.getErrorStream().read()) != -1) {
System.err.write(i);
}
}
public static void main(String[] args) throws Exception {
System.out.print("Runtime.exec: ");
String cmd = new java.util.Scanner(System.in).nextLine();
exec(cmd);
}
}
如果我将命令替换为echo hello world,该示例效果很好,但对于其他命令——尤其是那些涉及带有空格的文件名的命令——即使该命令显然正在执行,我也会收到错误:
myshell$ javac ExecTest.java && java ExecTest
Runtime.exec: ls -l 'My File.txt'
ls: cannot access 'My: No such file or directory
ls: cannot access File.txt': No such file or directory
同时,复制粘贴到我的 shell:
myshell$ ls -l 'My File.txt'
-rw-r--r-- 1 me me 4 Aug 2 11:44 My File.txt
为什么会有差异?它什么时候工作,什么时候失败?如何使它适用于所有命令?
【问题讨论】:
标签: java runtime.exec