精华内容
下载资源
问答
  • java执行shell命令

    2021-02-22 10:19:00
    java 执行shell命令 /** * 运行shell脚本 * @param shell 需要运行的shell脚本 */ public static void execShell(String shell){ try { Runtime.getRuntime().exec(shell); } catch (Exception e) { e....
    • java 执行shell命令
    /**
         * 运行shell脚本
         * @param shell 需要运行的shell脚本
         */
        public static void execShell(String shell){
            try {
            	Process process = null;
            	List<String> processResult = new ArrayList<String>();
            	process = Runtime.getRuntime().exec(shell);
            	BufferedReader input = new BufferedRead(new InputStreamReader(process.getInputStream());
            	String line = "";
            	while((line = input.readLine()) != null){
            		processResult.add(line);
            	}
            } catch (Exception e) {
                e.printStackTrace();
            } catch (IOException e) {
            	e.printStackTrace();
            }
        }
        
        /**
         * 运行shell脚本 new String[]方式
         * @param shell 需要运行的shell脚本
         */
        public static void execShellBin(String shell){
            try {
                Process process = null;
            	List<String> processResult = new ArrayList<String>();
            	process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shell},null,null);
            	BufferedReader input = new BufferedRead(new InputStreamReader(process.getInputStream());
            	String line = "";
            	while((line = input.readLine()) != null){
            		processResult.add(line);
            	}
            } catch (Exception e) {
                e.printStackTrace();
            } catch (IOException e) {
            	e.printStackTrace();
            }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
     
     
        /**
         * 运行shell并获得结果,注意:如果sh中含有awk,一定要按new String[]{"/bin/sh","-c",shStr}写,才可以获得流
         * 
         * @param shStr
         *            需要执行的shell
         * @return
         */
        public static List<String> runShell(String shStr) {
            List<String> strList = new ArrayList<String>();
            try {
                Process process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);
                InputStreamReader ir = new InputStreamReader(process.getInputStream());
                LineNumberReader input = new LineNumberReader(ir);
                String line;
                process.waitFor();
                while ((line = input.readLine()) != null){
                    strList.add(line);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return strList;
        }
    
    展开全文
  • I am trying to run my shell script using java program. I am getting following exception.java.io.IOException: Cannot run program "/home/builder/code/target/classes/idFetcher.sh": java.io.IOException: e...

    I am trying to run my shell script using java program. I am getting following exception.

    java.io.IOException: Cannot run program "/home/builder/code/target/classes/idFetcher.sh": java.io.IOException: error=13, Permission denied

    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)

    at java.lang.Runtime.exec(Runtime.java:605)

    at java.lang.Runtime.exec(Runtime.java:443)

    at java.lang.Runtime.exec(Runtime.java:340)

    at script.InformationFetcher.main(InformationFetcher.java:26)

    The path of file is correct and file is present at that location. Here is my code

    package script;

    import java.io.IOException;

    public class InformationFetcher {

    public InformationFetcher() {

    }

    public static void main(String[] args) {

    try {

    InformationFetcher informationFetcher = new InformationFetcher();

    Runtime.getRuntime().exec(informationFetcher.getFilePath());

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    public String getFilePath() {

    return this.getClass().getResource("/idFetcher.sh").getPath();

    }

    }

    解决方案

    Make the shell script executable for the user

    展开全文
  • Java执行Shell脚本

    2017-03-14 15:21:00
    Linux 系统下采用 Java 执行 Shell 脚本,直接上代码: package com.smbea.demo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * 执行 Shell ...

    Linux 系统下采用 Java 执行 Shell 脚本,直接上代码:

    package com.smbea.demo;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    /**
     * 执行 Shell 脚本
     * @author hapday
     * @date 2017年3月14日 @Time 下午2:28:22
     */
    public class ChmodShell {
    	/**
    	 * 更新文件夹的权限
    	 * @param folderName
    	 */
    	public static void updateFolderAuth(String folderName) {
    		String command = "chmod a+x mk.sh";		// 设置 shell 脚本的为“可读写”与“可执行”
    		Process process = null;
    		try {
    			process = Runtime.getRuntime().exec(command);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		try {
    			// 阻塞当前线程,直到 command 命令执行完毕
    			process.waitFor();		
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		} 
    		
    		// 要执行的 shell 脚本
    		command = "bash mk.sh " + folderName; 	// 也可以是 ksh、sh 等
    		
    		try {
    			process = Runtime.getRuntime().exec(command);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    
    		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    		try {
    			while ( null != (bufferedReader.readLine()) );
    			
    			bufferedReader.close();		// 关闭缓冲流
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		try {
    			// 阻塞当前线程,直到 command 命令执行完毕
    			process.waitFor();
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public static void main(String[] args) {
    		String parameter = "test";
    		
    		if(null != args && 0 < args.length) {
    			parameter = args[0];
    		}
    		
    		updateFolderAuth(parameter);
    	}
    }
    

      

    转载于:https://www.cnblogs.com/hapday/p/6548693.html

    展开全文
  • Java执行shell命令

    2021-06-02 17:59:17
    Java执行shell命令 1.概述 在本教程中,我们将说明从Java代码中执行Shell命令的两种方式。 第一种是使用Runtime类并调用其exec方法。 第二种也是更可定制的方法是创建和使用ProcessBuilder实例。 2.操作系统依赖性 ...

    Java执行shell命令


    1.概述

    在本教程中,我们将说明从Java代码中执行Shell命令的两种方式。

    第一种是使用Runtime类并调用其exec方法。

    第二种也是更可定制的方法是创建和使用ProcessBuilder实例。

    2.操作系统依赖性

    在创建执行shell命令的新Process之前,我们需要首先确定运行JVM的操作系统。

    这是因为,在Windows上,我们需要将命令作为cmd.exe Shell的参数运行,而在所有其他操作系统上,我们可以发出称为sh的标准Shell

    boolean isWindows = System.getProperty("os.name")
      .toLowerCase().startsWith("windows");
    

    3.输入和输出

    此外, 我们需要一种方法来挂接过程的输入和输出流。

    至少必须消耗输出-否则我们的过程不会成功返回,而是会挂起。

    让我们实现一个称为StreamGobbler的常用类,该类消耗InputStream

    private static class StreamGobbler implements Runnable {
        private InputStream inputStream;
        private Consumer<String> consumer;
    
        public StreamGobbler(InputStream inputStream, Consumer<String> consumer) {
            this.inputStream = inputStream;
            this.consumer = consumer;
        }
    
        @Override
        public void run() {
            new BufferedReader(new InputStreamReader(inputStream)).lines()
              .forEach(consumer);
        }
    }
    

    **注意:*此类正在实现Runnable接口,这意味着它可以由任何Executor执行*。

    4. Runtime.exec()

    Runtime.exec()的方法调用是一种生成新的子进程的简单方法,但尚未自定义。

    在以下示例中,我们将请求用户主目录的目录列表,并将其打印到控制台:

    String homeDirectory = System.getProperty("user.home");
    Process process;
    if (isWindows) {
        process = Runtime.getRuntime()
          .exec(String.format("cmd.exe /c dir %s", homeDirectory));
    } else {
        process = Runtime.getRuntime()
          .exec(String.format("sh -c ls %s", homeDirectory));
    }
    StreamGobbler streamGobbler = 
      new StreamGobbler(process.getInputStream(), System.out::println);
    Executors.newSingleThreadExecutor().submit(streamGobbler);
    int exitCode = process.waitFor();
    assert exitCode == 0;
    

    5. ProcessBuilder

    对于我们的计算问题的第二种实现,我们将使用ProcessBuilder。与运行时方法相比,这是首选方法,因为我们能够自定义一些详细信息。

    例如,我们能够:

    • 使用builder.directory()更改我们的shell命令在其中运行的工作目录
    • 使用builder.environment()将自定义键值映射设置为环境
    • 将输入和输出流重定向到自定义替换
    • 使用builder.inheritIO()将它们都继承到当前JVM进程的流中
    ProcessBuilder builder = new ProcessBuilder();
    if (isWindows) {
        builder.command("cmd.exe", "/c", "dir");
    } else {
        builder.command("sh", "-c", "ls");
    }
    builder.directory(new File(System.getProperty("user.home")));
    Process process = builder.start();
    StreamGobbler streamGobbler = 
      new StreamGobbler(process.getInputStream(), System.out::println);
    Executors.newSingleThreadExecutor().submit(streamGobbler);
    int exitCode = process.waitFor();
    assert exitCode == 0;
    

    六,结论

    正如我们在本快速教程中所看到的,我们可以通过两种不同的方式在Java中执行Shell命令。

    通常,如果您打算自定义生成的流程的执行(例如,更改其工作目录),则应考虑使用ProcessBuilder

    package com.xxx.xxx;
    
    import java.io.BufferedReader;
    import java.io.Closeable;
    import java.io.File;
    import java.io.InputStreamReader;
    
    public class CallCmd {
        // 关流方法
        private void closeStream(Closeable stream) {
            if (stream != null) {
                try {
                    stream.close();
                } catch (Exception e) {
                    System.out.println("close stream failed.");
                }
            }
        }
    
        // 此方法用来执行脚本或命令
        // String cmd:脚本(绝对路径)位置或命令内容
        // File dir:执行命令的子进程的工作目录(null则表示和当前主进程工作目录相同)
        public String callCMD(String cmd, File dir) {
            StringBuilder result = new StringBuilder();
            Process process = null;
            BufferedReader bufrIn = null;
            BufferedReader bufrError = null;
            try {
                // 执行命令, 返回一个子进程对象(命令在子进程中执行)
                process = Runtime.getRuntime().exec(cmd, null, dir);
                // 方法阻塞,等待命令执行完成
                process.waitFor();
                // 获取命令执行结果, 有两个结果: 正常的输出和错误的输出(PS: 子进程的输出就是主进程的输入)
                bufrIn =
                        new BufferedReader(
                                new InputStreamReader(process.getInputStream(), "UTF-8")); // 正常的输出
                bufrError =
                        new BufferedReader(
                                new InputStreamReader(process.getErrorStream(), "UTF-8")); // 错误的输出
                // 读取输出
                String line = null;
                while ((line = bufrIn.readLine()) != null) {
                    result.append(line).append('\n');
                }
                while ((line = bufrError.readLine()) != null) {
                    result.append(line).append('\n');
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                closeStream(bufrIn);
                closeStream(bufrError);
                // 销毁子进程
                if (process != null) {
                    process.destroy();
                }
            }
            // 返回执行结果
            return result.toString();
        }
    }
    
    展开全文
  • 利用Runtime.execute方法,我们可以在Java程序中运行Linux的Shell脚本,或者执行其他程序
  • I want to run a shell script through java .I am using license generation tool,It can be call with the help of ./LicenseGen.sh command,under it I require to execute another commandcreate licensekey -x ...
  • java执行shell脚本

    2019-09-04 16:02:36
    /** ... * File Name:ShellUtils.java * Package Name:com.jarxiaobai.cgcz.utils * Date:2019年9月4日下午3:49:43 * Copyright (c) 2019, chenzhou1025@126.com All Rights Reserved. ...
  • 可以使用如下的方法实现:假设要运行的命令是command(这个命令可以是一条shell命令,也可以是执行一个shell脚本),先创建一个run.sh,将要执行的命令写入run.sh中#!/bin/bash nohup command &amp;&gt;/dev...
  • Java 执行shell 脚本

    2017-12-06 19:29:34
    Java 会找/bin下面的命令执行 命令路径要写绝对的....!!!! 比如/bin/sh 代替 sh 执行命令方法 public static String exec(String cmd) { System.out.println(cmd); StringBuffer msg = null; try { // ...
  • java执行shell脚本超时[2021-02-11 04:20:34]简介:系统运维在数据库运维的过程中,Shell 脚本在很大程度上为运维提供了极大的便利性。而shell 脚本参数作为变量传递给SQL以及SQL脚本也是DB服务器原文链接:...
  • Java执行shell脚本文件完整代码

    万次阅读 2018-08-30 20:29:03
    一、背景 最近要下线一台历史遗留的物理机,在整理该机的...Java执行shell脚本文件共有两种方式,两种方式的共同点均是创建独立的process执行脚本文件。 方式1:通过Runtime创建process Process process = Runt...
  • 有时候我们需要在Linux服务器上执行一些shell命令脚本Java给我们提供了这个解决方案,核心类:Runtime 代码清单: ShellUtil.java @Slf4j public class ShellUtil { /** * 运行shell脚本 * * @param ...
  • 1.java运行shell命令基本类介绍,Process类与Runtime类 1.1 Process类: Process类是一个抽象类,通常用ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程。并返回 Process 子类的一个...
  • JAVA执行Shell命令

    2017-01-11 23:34:10
    基于JAVA执行shell指令,通常的代码范例为: Process process = Runtime.getRuntime().exec("jps -v"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))...
  • Java运行shell脚本

    万次阅读 2009-11-16 20:04:00
    利用Runtime.execute方法,我们可以在Java程序中运行Linux的Shell脚本,或者执行其他程序。参考了互联网上的这篇文章:http://lee79.javaeye.com/blog/418549(感谢一下),我重新整理了代码。现在通过CommandHelper...
  • * 带返回结果的命令执行 * @return */ public static void execCmdWithResult() { try { String cmd = "java_start.sh"; // String command = cmd; // //接收正常结果流 // ...
  • java 执行shell命令

    千次阅读 2018-01-01 13:59:59
    import java.io.BufferedReader; import java.io.InputStreamReader;...public class shell { public static String executeCommand(String command) { StringBuffer output = new StringBuffer();
  • Java调用Shell命令脚本

    万次阅读 多人点赞 2016-05-07 13:45:43
    1.介绍 有时候我们在Linux中运行Java程序时,需要调用一些Shell命令脚本。而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且
  • Java执行shell脚本文件

    2014-08-26 16:36:26
    之前开发中遇到过Java调用shell脚本的问题
  • JAVA执行Shell脚本

    2013-10-22 15:13:11
    执行Shell脚本时需要注意的几项(本人理解,大家有不同的意见欢迎补充):   1、可以获取脚本输出到控制台的内容,不能够直接获取return的值;   2、 如果不知道服务器上脚本是否有可执行权限,可以通过“sh ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 181,846
精华内容 72,738
关键字:

java执行shell命令

java 订阅