java调用linux命令传递参数问题
    简单的不带通配符linux命令调用非常简单,使用Runtime.getRuntime().exec(command)即可,如果要显示错误,或者 
输出信息,得到相应的inputStream,既可以打印出信息. 
但是对于以下命令: 
ls /var/log/nginx/access.log.* 
ls /var/log/nginx/access.log.* | grep 2011-05-16 
grep "test=123&name=opencfg.com" /var/log/nginx/access.log.* > /root/alert.log 
类似这样的命令,process.exec是不会理解其中的*号与> 甚至管道符号| 
这是由于在linux环境下,我们一般使用bash shell调用这些命令, 而其中的一些符号 诸如: 
*, ?, >, < , | 这样的符号是通过/bin/bash -c来做解释后再传递给 所调用的命令 
/bin/bash -c 这个参数已经作为默认命令,在系统启动时加载到运行环境中,所以我们敲以上命令的时候可以省略 
但对于java的Process来说,不会识别这些符号,因此我们必须强制调用/bin/bash -c来帮我们做符号解释:  
下边是一段测试代码: 
Java代码  
import java.io.BufferedReader;  
import java.io.InputStreamReader;    
/** 
 * CommandTest 
 *  
 * @author opencfg.com 
 * @since 0.0.1-SNAPSHOT 
 * @version 0.0.1-SNAPSHOT 
 * @date 2011-05-17 
 */  
public class CommandTest {    
    public static void main(String[] args) throws Exception {  
        // 1.test console args commands  
        // exec("args", args);    
        String[] commands = new String[] { "/bin/bash", "-c", "grep -h 200.*370.*http /var/log/nginx/access.log.* > /root/test_123.log" };  
        String[] commands_ls = new String[] { "/bin/bash", "-c", "ls /var/log/nginx/access.log.*" };    
        // 1.test java string commands  
        exec("commands", commands);  
    }    
    public static void exec(String message, String[] args) throws Exception {  
        print(message + ":");  
        Process process = Runtime.getRuntime().exec(args);  
        for (String arg : args) {  
            System.out.println(arg);  
            System.out.print(" ");  
        }  
        BufferedReader errorReader = new BufferedReader(new InputStreamReader(  
                process.getInputStream()));  
        String line = null;  
        while ((line = errorReader.readLine()) != null) {  
            System.err.println(line);  
        }  
        errorReader.close();  
        BufferedReader infoReader = new BufferedReader(new InputStreamReader(  
                process.getErrorStream()));  
        while ((line = infoReader.readLine()) != null) {  
            System.out.println(line);  
        }  
        infoReader.close();  
        print("");  
    }    
    public static void print(String[] arg