java中linux命令入参,(转载)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来帮我们做符号解释:

下边是一段测试代码:

importjava.io.BufferedReader;

importjava.io.InputStreamReader;

/**

* CommandTest

*

* @author opencfg.com

* @since 0.0.1-SNAPSHOT

* @version 0.0.1-SNAPSHOT

* @date 2011-05-17

*/

publicclassCommandTest {

publicstaticvoidmain(String[] args)throwsException {

// 1.test console args commands

// exec("args", args);

String[] commands = newString[] {"/bin/bash","-c","grep -h 200.*370.*http /var/log/nginx/access.log.* > /root/test_123.log"};

String[] commands_ls = newString[] {"/bin/bash","-c","ls /var/log/nginx/access.log.*"};

// 1.test java string commands

exec("commands", commands);

}

publicstaticvoidexec(String message, String[] args)throwsException {

print(message + ":");

Process process = Runtime.getRuntime().exec(args);

for(String arg : args) {

System.out.println(arg);

System.out.print(" ");

}

BufferedReader errorReader = newBufferedReader(newInputStreamReader(

process.getInputStream()));

String line = null;

while((line = errorReader.readLine()) !=null) {

System.err.println(line);

}

errorReader.close();

BufferedReader infoReader = newBufferedReader(newInputStreamReader(

process.getErrorStream()));

while((line = infoReader.readLine()) !=null) {

System.out.println(line);

}

infoReader.close();

print("");

}

publicstaticvoidprint(String[] args) {

for(String arg : args) {

System.out.println(arg);

System.out.print(" ");

}

}

publicstaticvoidprint(String arg) {

System.out.println(arg);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值