java调用linux命令传递参数问题
2012-02-10 17:55
731 查看
简单的不带通配符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来帮我们做符号解释:
下边是一段测试代码:
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[] args) { for (String arg : args) { System.out.println(arg); System.out.print(" "); } } public static void print(String arg) { System.out.println(arg); } }
相关文章推荐
- java调用linux命令 传递多个参数和通配符的问题
- (转载)java调用linux命令传递参数问题
- java调用linux命令传递参数问题
- Java 调用 FFMPEG 命令时用 url 作为输入源,Linux 下出现 “no such file or directory” 问题的解决
- 执行文件下载Java 调用 FFMPEG 命令时用 url 作为输入源,Linux 下出现 “no such file or directory” 问题的解决
- C#调用Java端Web服务(CXF)时发生Integer参数类型无法传递的问题
- Java JNI调用c++ dll文件,传递参数乱码问题
- 有关java的函数调用返回值的问题和参数传递问题
- Java程序调用Linux命令时的重定向问题
- java调用linux top命令的方法,以及遇到的一个问题
- Java方法调用时传递参数问题
- Java 调用 FFMPEG 命令时用 url 作为输入源,Linux 下出现 “no such file or directory” 问题的解决
- 关于Java中String类型的参数传递问题
- Linux下Java程序调用Openssl命令实现内存中加密数据
- Java-String类型的参数传递问题
- csharp编写界面,opencv编写类库,解决 Pinvoke过程中的参数传递和平台调用问题
- jquery中通过ajax调用webservice传递数组参数的问题
- 关于Java中的参数传递问题
- Linux下Java程序调用Openssl命令实现内存中加密数据
- java调用python脚本并向python脚本传递参数