(转载)java调用linux命令传递参数问题
来源:互联网 发布:删除搜狗输入法云计算 编辑:程序博客网 时间:2024/06/05 20:13
转自:http://blog.csdn.net/lrenjundk/article/details/7249483
简单的不带通配符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调用linux命令 传递多个参数和通配符的问题
- Java方法调用时传递参数问题
- (转载)Java String类型的参数传递问题
- java的参数传递(转载)
- Java JNI调用c++ dll文件,传递参数乱码问题
- 关于java调用webservice参数传递为空问题
- java方法调用时的参数传递问题
- java参数传递问题
- java参数传递问题
- Java参数传递问题
- java参数传递问题
- java参数传递问题
- java参数传递问题
- 【转载】Java语言中的参数传递
- (转载)图解Java中的参数传递
- ffmpeg yasm not found, use --disable-yasm for a crippled build
- 捕获CHtmlView的滚动条事件
- canvas.rotate(degrees)与canvas.rotate(degrees, px, py)
- Python的字典形式格式化字符
- An Experience of Windows server 8
- (转载)java调用linux命令传递参数问题
- android多线程下载详解
- HDU3577 离散化+线段树
- 利用Handler来更新android的UI
- cocos2d-x环境配置
- 含有字母数字的servlet验证码
- BOJ 331 树形DP
- Ubuntu 系统字体设置
- Linux命令