java 执行 terminal 命令无效

2014-12-23 04:38:17 +08:00
 wohenyingyu01

刚学java 5个月毕业,代码如下
public class HTMLTest {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    try{            
        Runtime r=Runtime.getRuntime();
        String[] cmd={"ls","~/Desktop"};            
        Process p=r.exec(cmd);
        //p.wait();
        p.waitFor();
        InputStreamReader ir=new InputStreamReader(p.getInputStream());
        BufferedReader br=new BufferedReader(ir);
        String line=null;
        while ((line=br.readLine())!=null){
            System.out.println(line);
        }
    }
    catch (IOException e){
        e.printStackTrace();
    }
    catch(InterruptedException e){
        e.printStackTrace();
    }
}

}
当cmd是"ls"时输出正常,可是无法添加路径参数如"~/Desktop",一加就没结果了,谷歌不到是什么问题,特来求助大神

2041 次点击
所在节点    问与答
7 条回复
KDr2
2014-12-23 08:08:31 +08:00
~ 是由 shell 展开的,写全路径就好了。或者把 "ls ~/xx" 传给 shell 来解释,而不是直接执行ls。

碰到这种问题从 p.getErrorStream() 读出错误信息看看会有帮助。
clino
2014-12-23 09:53:30 +08:00
或者这样调用:
sh -c "ls ~/xx"
lihuoqingfly
2014-12-23 10:30:57 +08:00
一楼正解,上次执行python xxx.py 只能从p.getErrorStream()取到值
wohenyingyu01
2014-12-23 11:30:17 +08:00
@KDr2 谢谢,确实是波浪号的问题,改成绝对路径就好了。但是我不知道怎么把"ls ~/xx"直接传递给shell,因为cmd那个string里面一有空格就报错,求解。。。
wohenyingyu01
2014-12-23 11:37:20 +08:00
@clino 问题的关键是没法把指令直接传递给shell,指令里面一有空格就报错,好像java这个exec并不是直接传递指令
KDr2
2014-12-23 11:48:43 +08:00
试试:
String[] cmd={"sh", "-c", "'ls ~/Desktop'"};
wohenyingyu01
2014-12-23 19:55:58 +08:00
@KDr2 谢谢,不过不行。。。。报错提示
sh: ls ~/Desktop: No such file or directory

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/155898

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX