问题是这样的,我定义了一个String类型的数组,里面一共有5个字符串,每一个字符串本地测试都是可以正常运行得命令(linux下得),然后我通过for循环一次执行这个数组里面的命令的时候,有部分能成功运行,但是有一部分就无法正常运行,再次将无法执行得命令 拿到shell里面手工确认,却发现是正常的,百思不得其解,请教各位高手! 附部分代码:
String [] cmd = {"mv -f ./template/" + ftpname +".conf " + "/usr/local/httpd/vhost.d/" ,
          "cp -rf ./template/tomcat/* " + "/var/www/virtual/" + ftpname +"/",
          "adduser " + ftpname + " -d /var/www/virtual/" +ftpname ,
          "echo " + "\"" +ftpname+":"+ftppass +"\"" +" | chpasswd",
          "chown -R " + ftpname +":" + ftpname + " /var/www/virtual/" + ftpname +"/"};
   for (int i = 0; i < cmd.length; i++) {
System.out.println(cmd[i]);
p = run.exec(cmd[i]);
p.waitFor();  
}
请教各位下关于exec() 这个方法 到底应该怎么用,才能保证命令一条一条正常运行????万分感谢

解决方案 »

  1.   

    本帖最后由 java2000_net 于 2008-04-22 07:23:23 编辑
      

  2.   

    紫竹老大,你给得代码我也测试过了,和我遇到得情况是一样的,确实每次都是 "echo " + """ + ftpname + ":" + ftppass + """ + " | chpasswd",
     这条运行不了 还有cp -rf ./template/tomcat/* " + "/var/www/virtual/" + ftpname + "/", 这条, 诶。。我通宵搞了一个晚上了,之前cp -rf ./template/tomcat/* " + "/var/www/virtual/" + ftpname + "/", 这条还可以运行,后来把 "echo " + """ +...这个加上,结果就出问题了。。晕死,不知道老大还有没好的办法?谢谢先
      

  3.   


    mv -f ./template/zizhulaoda.conf /usr/local/httpd/vhost.d/
    cp -rf ./template/tomcat/* /var/www/virtual/zizhulaoda/
    adduser zizhulaoda -d /var/www/virtual/zizhulaoda
    echo "zizhulaoda:zizhulaoda" | chpasswd
    "zizhulaoda:zizhulaoda" | chpasswd
    chown -R zizhulaoda:zizhulaoda /var/www/virtual/zizhulaoda/
    这个输出和我的一样,但是就是不行,第2个,第4个没有执行
      

  4.   

    String[] cmd = { "mv -f ./template/" + ftpname + ".conf " + "/usr/local/httpd/vhost.d/",
            "cp -rf ./template/tomcat/* " + "/var/www/virtual/" + ftpname + "/",
            "adduser " + ftpname + " -d /var/www/virtual/" + ftpname,
            "echo " + """ + ftpname + ":" + ftppass + """ + " | chpasswd",
            "chown -R " + ftpname + ":" + ftpname + " /var/www/virtual/" + ftpname + "/" };
        Process p;
        for (int i = 0; i < cmd.length; i++) {
          System.out.println(cmd[i]);
          p = run.exec(cmd[i]);
          BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
          String str = "";
          while ((str = br.readLine()) != null) {
            System.out.println(str);
          }
          br.close();
      

  5.   

    [root@localhost test]# cp -rf ./template/tomcat/* /var/www/virtual/zizhulaoda/  [root@localhost test]# ls /var/www/virtual/zizhulaoda/
    conf  logs  server  shared  temp  webapps  work
    我在shell里面执行就可以正常运行 已经将文件复制过去,
      

  6.   

    难道只有你的
    System.out.println(cmd[i]);
    输出了?
    我的那一大段啥也没有输出吗???太奇怪了吧!!!
      

  7.   

    紫竹老大, 只输出了 :"zizhulaoda:zizhulaoda" | chpasswd
      你仔细看看上面的,就这个是通过你写得输出流输出得
      

  8.   

    有可能是权限问题,你在shell里运行是一个linux帐户,在 java程序里运行,可能那个java程序属于另一个帐户
    而这个帐户没有运行某个命令的权限
      

  9.   

    Runtime.exec()确实会遇到这种问题.所以不要把Runtime.exec()等同于手工运行.建议把命令放到SHELL里后
    Runtime.exec()直接跑SHELL. 导致不稳定的原因有很多,操作系统.权限.执行完一个命令在等候