Run shell with java

Tech Tutorials

Tutorials and posts about Java, Spring, Hadoop and many more. Java code examples and interview questions. Spring code examples.

Saturday, March 20, 2021

How to Run a Shell Script From Java Program

This post talks about how you can execute a shell script from a Java program.

If you have a shell script say test.sh then you can run it from a Java program using RunTime class or ProcessBuilder (Note ProcessBuilder is added in Java 5).

echo 'starting script' mkdir test cd test touch SAMPLE

Using Runtime.getRunTime().exec to execute shell script

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class RunningSS < public static void main(String[] args) < Process p; try < String[] cmd = < "sh", "/home/adb/Documents/test.sh">; p = Runtime.getRuntime().exec(cmd); p.waitFor(); BufferedReader reader=new BufferedReader(new InputStreamReader( p.getInputStream())); String line; while((line = reader.readLine()) != null) < System.out.println(line); >> catch (IOException e) < // TODO Auto-generated catch block e.printStackTrace(); >catch (InterruptedException e) < // TODO Auto-generated catch block e.printStackTrace(); >> >

After executing this Java program with the given shell script, if you verify at the location where your Java program is you will see a directory test created and a file SAMPLE with in that directory.

  • public static Runtime getRuntime() — Returns the runtime object associated with the current Java application.
  • public Process exec(String command) throws IOException — Executes the specified string command in a separate process.
  • cmd— Starts a new command shell
  • /c— Executes the given command and terminates

Execution of the command returns instance of class Process. Using the getInputStream() method of Process class output of the executed command can be printed by reading the stream.

Using ProcessBuilder to execute shell script in Java

If you have to run the same command as above using ProcessBuilder, which is a much clearer way to do that, you can create a list with the command and the required arguments and then pass it to ProcessBuilder instance as command.

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class RunningSS < public static void main(String[] args) < Process p; try < ListcmdList = new ArrayList(); // adding command and args to the list cmdList.add("sh"); cmdList.add("/home/adb/Documents/test.sh"); ProcessBuilder pb = new ProcessBuilder(cmdList); p = pb.start(); p.waitFor(); BufferedReader reader=new BufferedReader(new InputStreamReader( p.getInputStream())); String line; while((line = reader.readLine()) != null) < System.out.println(line); >> catch (IOException e) < // TODO Auto-generated catch block e.printStackTrace(); >catch (InterruptedException e) < // TODO Auto-generated catch block e.printStackTrace(); >> > That's all for this topic How to Run a Shell Script From Java Program. If you have any doubt or any suggestions to make please drop a comment. Thanks!

Источник

Читайте также:  Html src alt attribute

Как с помощью Java выполнить Shell-команду

В этом руководстве мы рассмотрим два способа выполнения shell -команд из программы на Java . Первый способ – использовать класс Runtime и вызвать его метод exec . Второй (более гибкий способ) – создать экземпляр класса ProcessBuilder .

Зависимость операционной системы

Сначала нужно определить операционную систему, на которой работает наша JVM . В Windows необходимо запустить команду в качестве аргумента оболочки cmd.exe, а в остальных ОС мы будем использовать стандартную оболочку sh:

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

Ввод и вывод

Также нужно подключиться к входным и выходным потокам нашего процесса. По крайней мере, нужно получить выходные данные, иначе процесс зависнет.

Реализуем класс StreamGobbler, который использует InputStream :

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

Примечание. Этот класс реализует интерфейс Runnable , а это означает, что он может быть выполнен любым исполнителем.

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;

ProcessBuilder

Класс ProcessBuilder является более гибким в использовании, чем Runtime. Он позволяет настраивать целый ряд параметров.

  • изменить рабочий каталог, в котором работает shell-команда,
  • перенаправить потоки ввода и вывода;
  • наследовать их в потоках текущего процесса JVM, используя builder.inheritIO().
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;

Заключение

Shell команды в Java можно выполнять двумя различными способами. Но если нужно настроить выполнение созданного процесса, то используйте класс ProcessBuilder .

Читайте также:  Adding an attribute to an element in javascript

Программные исходники примеров, приведенных в этой статье, доступны на GitHub .

Источник

How to run unix/shell command in java like chmod, mkdir, grep or any unix commands

Twitter Facebook Google Pinterest

Executing a shell command from within Java code using Runtime.getRuntime().exec() method and ProcessBuilder api. Examples on chmod, mkdir, grep or any unix commands.

Running shell command in Java

In this tutorial, We are going to learn how to run shell commands from java such as chmod, mkdir, grep files.

run-shell-command-in-java

Find operating system:

Before running the command, we must know the operating system where the application is running.

By calling System.getProperty(«os.name») method, we will get the OS name.

private String OS = System.getProperty("os.name").toLowerCase();

This statement, may return the following operating system names.

Linux, Windows, SunOS, Mac OS, HP-UX and AIX

Runtime.getRuntime():

Runtime class has a exec(String command) method that Executes the specified string command in a separate process.

Before invoking this method, we must ensure that running program on correct OS.

chmod command execution:

Runtime.getRuntime().exec("sh -c chmod -R 777 /home/java_w3schools/start.sh");

Changing the file permissions to read/write/execute to all users.

mkdir command execution:

Runtime.getRuntime().exec("sh -c mkdir -p /home/java_w3schools/java/posts);

Creates folders recursively

grep command execution:

Runtime.getRuntime().exec("sh -c grep -i 'exception' /home/java_w3schools/java/server.log);

ProcessBuilder:

This class is used to create operating system processes. command() method to add the commands to the process builder and need to invoke the start() method to start a new process on the underlying operating system.

Example to ping using ProcessBuilder on Unix:

ProcessBuilder processBuilder = new ProcessBuilder(); processBuilder.command("sh", "-c", "ping -n 3 google.com"); Process process = processBuilder.start();
Pinging google.com [216.58.200.142] with 32 bytes of data: Reply from 216.58.200.142: bytes=32 time=11ms TTL=51 Reply from 216.58.200.142: bytes=32 time=12ms TTL=51 Reply from 216.58.200.142: bytes=32 time=10ms TTL=51 Ping statistics for 216.58.200.142: Packets: Sent = 3, Received = 3, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 10ms, Maximum = 12ms, Average = 11ms
processBuilder.command("sh", "-c", "chmod -R 777 /home/java_w3schools/start.sh");
processBuilder.command("sh", "-c", "mkdir -p /home/java_w3schools/java/posts");
processBuilder.command("sh", "-c", "grep -i 'exception' /home/java_w3schools/java/server.log");

Conclusion:

Today, we saw the guide to how to two ways of running a shell command in Java, both on Windows as well as on UNIX running example commands such as chmod, mkdir, grep etc.

Читайте также:  Шрифт для всей страницы css

Labels:

SHARE:

Twitter Facebook Google Pinterest

About Us

Java 8 Tutorial

  • Java 8 New Features
  • Java 8 Examples Programs Before and After Lambda
  • Java 8 Lambda Expressions (Complete Guide)
  • Java 8 Lambda Expressions Rules and Examples
  • Java 8 Accessing Variables from Lambda Expressions
  • Java 8 Method References
  • Java 8 Functional Interfaces
  • Java 8 — Base64
  • Java 8 Default and Static Methods In Interfaces
  • Java 8 Optional
  • Java 8 New Date Time API
  • Java 8 — Nashorn JavaScript

Java Threads Tutorial

Kotlin Conversions

Kotlin Programs

Java Conversions

  • Java 8 List To Map
  • Java 8 String To Date
  • Java 8 Array To List
  • Java 8 List To Array
  • Java 8 Any Primitive To String
  • Java 8 Iterable To Stream
  • Java 8 Stream To IntStream
  • String To Lowercase
  • InputStream To File
  • Primitive Array To List
  • Int To String Conversion
  • String To ArrayList

Java String API

  • charAt()
  • chars() — Java 9
  • codePointAt()
  • codePointCount()
  • codePoints() — Java 9
  • compareTo()
  • compareToIgnoreCase
  • concat()
  • contains()
  • contentEquals()
  • copyValueOf()
  • describeConstable() — Java 12
  • endsWith()
  • equals()
  • equalsIgnoreCase()
  • format()
  • getBytes()
  • getChars()
  • hashcode()
  • indent() — Java 12
  • indexOf()
  • intern()
  • isBlank() — java 11
  • isEmpty()
  • join()
  • lastIndexOf()
  • length()
  • lines()
  • matches()
  • offsetByCodePoints()
  • regionMatches()
  • repeat()
  • replaceFirst()
  • replace()
  • replaceAll()
  • resolveConstantDesc()
  • split()
  • strip(), stripLeading(), stripTrailing()
  • substring()
  • toCharArray()
  • toLowerCase()
  • transform() — Java 12
  • valueOf()

Spring Boot

$show=Java%20Programs

$show=Kotlin

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,18,Arrays,24,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,8,Collections,37,Collector,1,Command Line,1,Comparator,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,149,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,38,Dictionary,1,Difference,2,Download,1,Eclipse,3,Efficiently,1,Error,1,Errors,1,Exceptions,8,Fast,1,Files,17,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,9,Grant,1,Grep,1,HashMap,2,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,6,Iterate,2,Jackson API,3,Java,32,Java 10,1,Java 11,6,Java 12,5,Java 13,2,Java 14,2,Java 8,128,Java 8 Difference,2,Java 8 Stream Conversions,4,java 8 Stream Examples,12,Java 9,1,Java Conversions,14,Java Design Patterns,1,Java Files,1,Java Program,3,Java Programs,114,Java Spark,1,java.lang,4,java.util. function,1,JavaScript,1,jQuery,1,Kotlin,11,Kotlin Conversions,6,Kotlin Programs,10,Lambda,2,lang,29,Leap Year,1,live updates,1,LocalDate,1,Logging,1,Mac OS,3,Math,1,Matrix,6,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,2,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,31,String,61,String Programs,28,String Revese,1,StringBuilder,1,Swing,1,System,1,Tags,1,Threads,11,Tomcat,1,Tomcat 8,1,Troubleshoot,26,Unix,3,Updates,3,util,5,While Loop,1,

JavaProgramTo.com: How to run unix/shell command in java like chmod, mkdir, grep or any unix commands

Executing a shell command from within Java code using Runtime.getRuntime().exec() method and ProcessBuilder api. Examples on chmod, mkdir, grep or any unix commands.

Источник

Оцените статью