জাভা কোড থেকে ইউনিক্স শেল স্ক্রিপ্ট কীভাবে চালানো যায়?


155

জাভা থেকে ইউনিক্স কমান্ড চালানো বেশ সহজ।

Runtime.getRuntime().exec(myCommand);

তবে জাভা কোড থেকে ইউনিক্স শেল স্ক্রিপ্ট চালানো কি সম্ভব? যদি হ্যাঁ তবে জাভা কোডের মধ্যে থেকে শেল স্ক্রিপ্টটি চালানো ভাল অনুশীলন হবে?


3
যদি শেল স্ক্রিপ্টটি ইন্টারেক্টিভ হয় তবে বিষয়গুলি আকর্ষণীয় হয়ে উঠবে।
আর্নেস্তো

মাইকম্যান্ড ভেরিয়েবল কি স্ট্রিং? যদি হ্যাঁ, তবে এটি কার্যকর হবে না, এক্সিকিউট পদ্ধতিটির জন্য স্ট্রিং এবং যুক্তি প্রয়োজন, আমার আনসারের নীচে দেখুন এটি পুরোপুরি কাজ করে
সিং রাঠোর

উত্তর:


174

আপনার অবশ্যই প্রক্রিয়া নির্মাতার দিকে নজর দেওয়া উচিত । এটি সত্যই এই ধরণের জিনিসটির জন্য নির্মিত।

ProcessBuilder pb = new ProcessBuilder("myshellScript.sh", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 Process p = pb.start();

3
জাভা থেকে স্ক্রিপ্ট কল করা কি ভাল অনুশীলন? কোন পারফরম্যান্স সমস্যা?
কৌতুকসাহনী

1
নোট করুন যে আপনার জাভা কনফিগারেশনের উপর নির্ভর করে স্ক্রিপ্টটি সম্পাদন করতে প্রোগ্রাম / বিন / বাশ বা sh উল্লেখ করতে হবে ( স্ট্যাকওভারফ্লো / সেকশনস / 25647806/… দেখুন )
বেন হল্যান্ড

@ মিলহৌস আমি জানি এটি বেশ দেরি হয়ে গেছে এবং জিনিসগুলি সম্ভবত পরিবর্তিত হতে পারে তবে বর্তমান জাভা প্রক্রিয়া ডকুমেন্টেশন অনুসারে শেল স্ক্রিপ্টগুলির জন্য এটি প্রস্তাবিত পদ্ধতি নয়: ডকস.অরাকল / জাভাজে / / ডকস / এপি / জাভা / লং / প্রসেস এইচটিএমএল " পদ্ধতিগুলি যে পদ্ধতিগুলি তৈরি করে সেগুলি নির্দিষ্ট নেটিভ প্ল্যাটফর্মগুলিতে যেমন বিশেষ নেটিভ উইন্ডোটিং প্রক্রিয়া, ডেমন প্রক্রিয়াগুলি, মাইক্রোসফ্ট উইন্ডোজে উইন 16 / ডস প্রক্রিয়া, বা শেল স্ক্রিপ্টগুলির জন্য বিশেষ প্রক্রিয়াগুলির জন্য ভাল কাজ করতে পারে না ""
হারমান

24

আপনি অ্যাপাচি কমন্স এক্সিকিউটিভ লাইব্রেরিও ব্যবহার করতে পারেন ।

উদাহরণ:

package testShellScript;

import java.io.IOException;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;

public class TestScript {
    int iExitValue;
    String sCommandString;

    public void runScript(String command){
        sCommandString = command;
        CommandLine oCmdLine = CommandLine.parse(sCommandString);
        DefaultExecutor oDefaultExecutor = new DefaultExecutor();
        oDefaultExecutor.setExitValue(0);
        try {
            iExitValue = oDefaultExecutor.execute(oCmdLine);
        } catch (ExecuteException e) {
            System.err.println("Execution failed.");
            e.printStackTrace();
        } catch (IOException e) {
            System.err.println("permission denied.");
            e.printStackTrace();
        }
    }

    public static void main(String args[]){
        TestScript testScript = new TestScript();
        testScript.runScript("sh /root/Desktop/testScript.sh");
    }
}

আরও রেফারেন্সের জন্য, অ্যাপাচি ডকেও একটি উদাহরণ দেওয়া আছে ।


আমি কি উইন্ডোজ এ চালাতে পারি?
বেকুর

@ কিশানসার্সেক হাগাজ্জর আমরা শেলসক্রিপ্ট থেকে আউটপুট ক্যাপচার করতে এবং এটি জাভা ইউআইতে প্রদর্শন করতে পারি। আমি জানতে চাই কি এটি করা সম্ভব
ক্রান্তি সামা

@ ক্রান্তিসামা আপনি আউটপুট ক্যাপচার করতে পদ্ধতি ব্যবহারের OutputStreamজন্য সেট করতে পারেন । দয়া করে আরও তথ্যের জন্য এই থ্রেডটি উল্লেখ করুন: আমি কীভাবে কোনও আদেশের আউটপুট ক্যাপচার করব ...DefaultExecuterDefaultExecuter.setStreamHandlerOutputStream
কোনও বাগ

1
আপনার প্রকল্পে অ্যাপাচি কমন্স অ্যাক্সেস
আনিলেড

2
সবচেয়ে ভালো সমাধান.
দেব

23

আমি বলব যে জাভা থেকে শেল স্ক্রিপ্ট চালানো জাভার চেতনার মধ্যে নেই । জাভা বোঝানো হচ্ছে ক্রস প্ল্যাটফর্ম, এবং একটি শেল স্ক্রিপ্ট চালানো এর ব্যবহার কেবল ইউনিক্সের মধ্যে সীমাবদ্ধ করবে।

যা বলা হয়েছিল, জাভা থেকে শেল স্ক্রিপ্ট চালানো অবশ্যই সম্ভব। আপনি তালিকাভুক্ত একই সিনট্যাক্সটি ব্যবহার করবেন (আমি নিজে এটি চেষ্টা করে দেখিনি, তবে সরাসরি শেল স্ক্রিপ্টটি চালানোর চেষ্টা করুন, এবং যদি এটি কাজ না করে তবে শেলটি নিজেই চালনা করুন, স্ক্রিপ্টটিকে কমান্ড লাইন প্যারামিটার হিসাবে পাস করে) ।


43
হ্যাঁ, তবে অনেক দিক থেকেই যে "স্পিরিট অফ জাভা" বা "লেখার জন্য একবারে লিখুন" মন্ত্রটি যাইহোক একটি কল্পকাহিনী।
ববিশ্যাফটো

15
এটি সম্পর্কে পৌরাণিক কাহিনী কি?
ক্রিস বাল্যান্স

15
আপনি সাধারণত যে অনেক লেখা শেষ, কি এটা সম্পর্কে পৌরাণিক হয় switchesএবং ifবিবৃতি তারতম্য যে জাভা কোর লাইব্রেরি নিয়ে এসেছেন মানুষের সর্বোত্তম প্রচেষ্টা সত্ত্বেও বিভিন্ন প্ল্যাটফর্মের উপর ঠিক একই কাজ করে না সব কাছাকাছি পেতে।
ব্রায়ান সুইভিনে

2
আশ্চর্যজনকভাবে যথেষ্ট! আমি উপরের সমস্ত মন্তব্য এবং উত্তর দিয়ে একমত!
আনবিস

11
@ ববিশ্যাফটো আমি ১ years বছর ধরে জাভা লিখছি, এবং উইন্ডোতে সর্বদা বিকাশ করেছি, আমার সমস্ত অ্যাপ্লিকেশন সর্বদা সোলারিস / আইবিএম বা ওরাকলের স্বাদযুক্ত ইউনিক্স বাক্সগুলিতে স্থাপন করা হয়, সুতরাং আপনি কী বলছেন তা সম্পর্কে আমার কোনও ধারণা নেই
কল্পনা সনি

21

আমি মনে করি আপনি নিজের প্রশ্নের উত্তর দিয়ে দিয়েছেন

Runtime.getRuntime().exec(myShellScript);

এটি ভাল অনুশীলন কিনা তা হিসাবে ... আপনি শেল স্ক্রিপ্ট যা জাভা দিয়ে করতে পারবেন না তা দিয়ে আপনি কী করার চেষ্টা করছেন?


আমি একই জাতীয় পরিস্থিতির মুখোমুখি হয়েছি যেখানে আমার জাভা কোডে একটি নির্দিষ্ট শর্ত দেখা দিলে আমাকে বিভিন্ন সার্ভারে কয়েকটি ফাইল আরএসএনসি করতে হবে। অন্য কোন ভাল উপায় আছে?
ভি কুমার

1
@ ক্রিস ব্যাল্যান্স ... আমি জানি এই মন্তব্যটি প্রায় 10 বছর পরে :) তবে আপনার প্রশ্নের উত্তর দেওয়ার জন্য, যদি আমার প্রোগ্রামটি অর্ধ ডজন ডাউন স্ট্রিম এবং উজানের চ্যানেলগুলির সাথে যোগাযোগ করতে হয় এবং তাদের গ্রহণযোগ্য যোগাযোগের উপর নির্ভর করে। বিশেষত যখন আপনি এমন কোনও প্রকল্পে কাজ করছেন যা এতগুলি বিজোড় চ্যানেলগুলির সাথে যোগাযোগ করে :)
স্টাননার

কার্যকারিতাটি শেল স্ক্রিপ্টে ঠেলে দেওয়া জাভাতে কাজ করার অন্য কোনও উপায় না থাকলে সর্বশেষ চেষ্টা করা হবে। আপনি যদি শেল স্ক্রিপ্টে কাজটি চালিয়ে যাচ্ছেন তবে রাষ্ট্র এবং নির্ভরতা সমন্বয় করা অগত্যা জটিল হবে। কখনও কখনও শেল স্ক্রিপ্টই একমাত্র উপায় বা সময়সীমা এটিকে কিছুটা কাজ সম্পাদনের একমাত্র যুক্তিসঙ্গত উপায় করে তোলে তাই এটি করার একটি উপায় এটি।
ক্রিস ব্যাল্যান্স

11

হ্যাঁ এটা সম্ভব। এটি আমার পক্ষে কাজ করেছে।

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.omg.CORBA.portable.InputStream;

public static void readBashScript() {
        try {
            Process proc = Runtime.getRuntime().exec("/home/destino/workspace/JavaProject/listing.sh /"); //Whatever you want to execute
            BufferedReader read = new BufferedReader(new InputStreamReader(
                    proc.getInputStream()));
            try {
                proc.waitFor();
            } catch (InterruptedException e) {
                System.out.println(e.getMessage());
            }
            while (read.ready()) {
                System.out.println(read.readLine());
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

7

এখানে আমার উদাহরণ। আশা করি এটি সার্থক হবে।

public static void excuteCommand(String filePath) throws IOException{
    File file = new File(filePath);
    if(!file.isFile()){
        throw new IllegalArgumentException("The file " + filePath + " does not exist");
    }
    if(isLinux()){
        Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", filePath}, null);
    }else if(isWindows()){
        Runtime.getRuntime().exec("cmd /c start " + filePath);
    }
}
public static boolean isLinux(){
    String os = System.getProperty("os.name");  
    return os.toLowerCase().indexOf("linux") >= 0;
}

public static boolean isWindows(){
    String os = System.getProperty("os.name");
    return os.toLowerCase().indexOf("windows") >= 0;
}

5

হ্যাঁ, এটি সম্ভব এবং আপনি এটির উত্তর দিয়েছেন! ভাল অভ্যাস সম্পর্কে, আমি আপনার কোড থেকে সরাসরি না ফাইল থেকে আদেশগুলি চালু করা ভাল বলে মনে করি। আপনি করতে হবে তাই জাভা একটি বিদ্যমান কমান্ড (অথবা এক কমান্ড) এর তালিকা চালানো .bat, .sh, .ksh... ফাইল। এখানে একটি ফাইলে কমান্ডের তালিকা কার্যকর করার একটি উদাহরণ রয়েছে MyFile.sh:

    String[] cmd = { "sh", "MyFile.sh", "\pathOfTheFile"};
    Runtime.getRuntime().exec(cmd);

4

একটি নিখুঁত পাথ হার্ডকোড না এড়াতে, আপনি নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারেন যা আপনার স্ক্রিপ্টটি যদি আপনার মূল ডিরেক্টরিতে থাকে তবে এটি কার্যকর এবং কার্যকর করতে পারে।

public static void runScript() throws IOException, InterruptedException {
    ProcessBuilder processBuilder = new ProcessBuilder("./nameOfScript.sh");
    //Sets the source and destination for subprocess standard I/O to be the same as those of the current Java process.
    processBuilder.inheritIO();
    Process process = processBuilder.start();

    int exitValue = process.waitFor();
    if (exitValue != 0) {
        // check for errors
        new BufferedInputStream(process.getErrorStream());
        throw new RuntimeException("execution of script failed!");
    }
}

3

আমার হিসাবে সব জিনিস সহজ হতে হবে। স্ক্রিপ্ট চলমান জন্য শুধু চালানো প্রয়োজন

new ProcessBuilder("pathToYourShellScript").start();

3

ZT প্রক্রিয়া নির্বাহক গ্রন্থাগার এ্যাপাচি কমন্স Exec এর একটি বিকল্প। কমান্ড চালানো, আউটপুট ক্যাপচার করা, টাইমআউট সেট করা ইত্যাদির কার্যকারিতা রয়েছে It

আমি এখনও এটি ব্যবহার করি নি, তবে এটি যুক্তিসঙ্গতভাবে ভাল-ডকুমেন্টেড দেখায়।

ডকুমেন্টেশন থেকে একটি উদাহরণ: একটি কমান্ড কার্যকর করা, স্টার্ডারকে একটি লগারে পাম্প করা, আউটপুটটিকে ইউটিএফ 8 স্ট্রিং হিসাবে ফিরিয়ে দেওয়া।

 String output = new ProcessExecutor().command("java", "-version")
    .redirectError(Slf4jStream.of(getClass()).asInfo())
    .readOutput(true).execute()
    .outputUTF8();

এর ডকুমেন্টেশন কমন্স এক্সিকিউটিভের উপর নিম্নলিখিত সুবিধাগুলি তালিকাবদ্ধ করে:

  • স্ট্রিমগুলির উন্নত হ্যান্ডলিং
    • স্ট্রিমগুলিতে পড়া / লেখা
    • স্টাডারকে স্টডআউটে পুনঃনির্দেশ করা হচ্ছে
  • সময়সীমা উন্নত হ্যান্ডলিং
  • প্রস্থান কোডগুলির উন্নত চেকিং
  • উন্নত এপিআই
    • বেশ জটিল ব্যবহারের ক্ষেত্রে এক লাইনার
    • একটি স্ট্রিনে প্রক্রিয়া আউটপুট পেতে একটি লাইনার
    • প্রসেস অবজেক্টে অ্যাক্সেস উপলব্ধ
    • অ্যাসিঙ্ক প্রক্রিয়াগুলির জন্য সমর্থন ( ভবিষ্যত )
  • এসএলএফ 4জে এপিআই দিয়ে উন্নত লগিং
  • একাধিক প্রক্রিয়া জন্য সমর্থন

2

জাভা থেকে কীভাবে ইউনিক্স বাশ বা উইন্ডোজ ব্যাট / সেমিডি স্ক্রিপ্ট চালানো যায় তার একটি উদাহরণ এখানে। স্ক্রিপ্ট থেকে আর্গুমেন্টগুলি পাস করা যায় এবং স্ক্রিপ্ট থেকে প্রাপ্ত আউটপুট। পদ্ধতিটি নির্বিচারে সংখ্যক আর্গুমেন্ট গ্রহণ করে।

public static void runScript(String path, String... args) {
    try {
        String[] cmd = new String[args.length + 1];
        cmd[0] = path;
        int count = 0;
        for (String s : args) {
            cmd[++count] = args[count - 1];
        }
        Process process = Runtime.getRuntime().exec(cmd);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        try {
            process.waitFor();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        while (bufferedReader.ready()) {
            System.out.println("Received from script: " + bufferedReader.readLine());
        }
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
        System.exit(1);
    }
}

ইউনিক্স / লিনাক্সে চলাকালীন, উইন্ডোজ চলাকালীন, पथটি অবশ্যই ইউনিক্সের মতো ('/' বিভাজক হিসাবে) থাকতে হবে - '\' ব্যবহার করুন। হাইয়ার বাশ স্ক্রিপ্টের একটি উদাহরণ (টেস্ট.শ) যা নির্বিচারে সংখ্যক আর্গুমেন্ট গ্রহণ করে এবং প্রতিটি যুক্তি দ্বিগুণ করে:

#!/bin/bash
counter=0
while [ $# -gt 0 ]
do
  echo argument $((counter +=1)): $1
  echo doubling argument $((counter)): $(($1+$1))
  shift
done

কল করার সময়

runScript("path_to_script/test.sh", "1", "2")

ইউনিক্স / লিনাক্সে আউটপুটটি হ'ল:

Received from script: argument 1: 1
Received from script: doubling argument 1: 2
Received from script: argument 2: 2
Received from script: doubling argument 2: 4

হাইয়ার হ'ল একটি সাধারণ সেন্টিমিডি উইন্ডোজ স্ক্রিপ্ট টেস্ট.কম, যা ইনপুট আর্গুমেন্টগুলির সংখ্যা গণনা করে:

@echo off
set a=0
for %%x in (%*) do Set /A a+=1 
echo %a% arguments received

উইন্ডোজ স্ক্রিপ্ট কল করার সময়

  runScript("path_to_script\\test.cmd", "1", "2", "3")

আউটপুট হয়

Received from script: 3 arguments received

1

এটি সম্ভব, কেবল এটি অন্য প্রোগ্রাম হিসাবে চালিত করুন। আপনার স্ক্রিপ্টের যথাযথ # আছে তা নিশ্চিত করুন! স্ক্রিপ্টের প্রথম লাইন হিসাবে (সে-ব্যাং) লাইন এবং ফাইলটিতে অনুমতি সম্পাদনের অনুমতি রয়েছে কিনা তা নিশ্চিত করুন।

উদাহরণস্বরূপ, যদি এটি কোনও বাশ স্ক্রিপ্ট হয় তবে স্ক্রিপ্টের শীর্ষে #! / বিন / বাশ লাগান, chmod + xও।

এছাড়াও এটি যদি ভাল অনুশীলন হয় তবে এটি বিশেষত জাভার জন্য নয়, তবে এটি যদি একটি বৃহত স্ক্রিপ্টের উপরে পোর্টিং করতে আপনাকে অনেক সময় সাশ্রয় করে এবং আপনি এটি করার জন্য অতিরিক্ত অর্থ পাচ্ছেন না;) আপনার সময় বাঁচায়, এক্সিকিউটরকে স্ক্রিপ্ট, এবং আপনার দীর্ঘমেয়াদী টোডো তালিকায় জাভাতে পোর্টিং রাখুন।


1
  String scriptName = PATH+"/myScript.sh";
  String commands[] = new String[]{scriptName,"myArg1", "myArg2"};

  Runtime rt = Runtime.getRuntime();
  Process process = null;
  try{
      process = rt.exec(commands);
      process.waitFor();
  }catch(Exception e){
      e.printStackTrace();
  }  

1

এটি একটি দেরী উত্তর। যাইহোক, আমি ভবিষ্যতের বিকাশকারীদের জন্য একটি স্প্রিং-বুট অ্যাপ্লিকেশন থেকে শেল স্ক্রিপ্ট কার্যকর করার জন্য আমার যে সংগ্রামটি সহ্য করতে হয়েছিল তা ভেবে ভেবেছিলাম putting

  1. আমি স্প্রিং-বুটে কাজ করছিলাম এবং আমি আমার জাভা অ্যাপ্লিকেশন থেকে চালানো ফাইলটি খুঁজে পাইনি এবং এটি নিক্ষেপ করছে FileNotFoundFoundException। আমাকে ফাইলটি resourcesডিরেক্টরিতে রাখতে pom.xmlহয়েছিল এবং নীচের মতো অ্যাপ্লিকেশন শুরু হওয়ার সময় ফাইলটি স্ক্যান করতে সেট করতে হয়েছিল।

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
                <include>**/*.sh</include>
            </includes>
        </resource>
    </resources>
  2. এর পরে ফাইলটি কার্যকর করতে আমার সমস্যা হয়েছিল এবং এটি ফিরে আসছিল error code = 13, Permission Denied। তারপরে আমাকে এই কমান্ডটি চালিয়ে ফাইলটি এক্সিকিউটেবল করতে হয়েছিল -chmod u+x myShellScript.sh

অবশেষে, আমি নিম্নলিখিত কোড স্নিপেট ব্যবহার করে ফাইলটি কার্যকর করতে পারি।

public void runScript() {
    ProcessBuilder pb = new ProcessBuilder("src/main/resources/myFile.sh");
    try {
        Process p;
        p = pb.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

আশা করি যে কারও সমস্যা সমাধান করবে।


0

সোলারিস 5..১০ এটি ঠিক একই জিনিস এটির মতো কাজ করে ./batchstart.shএমন একটি কৌশল আছে যা আমি জানতে পারি না আপনার ওএস \\. batchstart.shপরিবর্তে এটি ব্যবহার করে কিনা । এই ডাবল স্ল্যাশ সাহায্য করতে পারে।


0

আমি মনে করি

System.getProperty("os.name"); 

অপারেটিং সিস্টেমটি চেক করা যদি শেল / ব্যাশ স্ক্রিপ্টগুলি সমর্থন করে তবে তা পরিচালনা করতে পারে। কোড পোর্টেবল করার প্রয়োজন হয়।


0

লিনাক্স ব্যবহারের জন্য

public static void runShell(String directory, String command, String[] args, Map<String, String> environment)
{
    try
    {
        if(directory.trim().equals(""))
            directory = "/";

        String[] cmd = new String[args.length + 1];
        cmd[0] = command;

        int count = 1;

        for(String s : args)
        {
            cmd[count] = s;
            count++;
        }

        ProcessBuilder pb = new ProcessBuilder(cmd);

        Map<String, String> env = pb.environment();

        for(String s : environment.keySet())
            env.put(s, environment.get(s));

        pb.directory(new File(directory));

        Process process = pb.start();

        BufferedReader inputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        BufferedWriter outputReader = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
        BufferedReader errReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));

        int exitValue = process.waitFor();

        if(exitValue != 0) // has errors
        {
            while(errReader.ready())
            {
                LogClass.log("ErrShell: " + errReader.readLine(), LogClass.LogMode.LogAll);
            }
        }
        else
        {
            while(inputReader.ready())
            {
                LogClass.log("Shell Result : " + inputReader.readLine(), LogClass.LogMode.LogAll);
            }
        }
    }
    catch(Exception e)
    {
        LogClass.log("Err: RunShell, " + e.toString(), LogClass.LogMode.LogAll);
    }
}

public static void runShell(String path, String command, String[] args)
{
    try
    {
        String[] cmd = new String[args.length + 1];

        if(!path.trim().isEmpty())
            cmd[0] = path + "/" + command;
        else
            cmd[0] = command;

        int count = 1;

        for(String s : args)
        {
            cmd[count] = s;
            count++;
        }

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

        BufferedReader inputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        BufferedWriter outputReader = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
        BufferedReader errReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));

        int exitValue = process.waitFor();

        if(exitValue != 0) // has errors
        {
            while(errReader.ready())
            {
                LogClass.log("ErrShell: " + errReader.readLine(), LogClass.LogMode.LogAll);
            }
        }
        else
        {
            while(inputReader.ready())
            {
                LogClass.log("Shell Result: " + inputReader.readLine(), LogClass.LogMode.LogAll);
            }
        }
    }
    catch(Exception e)
    {
        LogClass.log("Err: RunShell, " + e.toString(), LogClass.LogMode.LogAll);
    }
}

এবং ব্যবহারের জন্য;

ShellAssistance.runShell("", "pg_dump", new String[]{"-U", "aliAdmin", "-f", "/home/Backup.sql", "StoresAssistanceDB"});

অথবা

ShellAssistance.runShell("", "pg_dump", new String[]{"-U", "aliAdmin", "-f", "/home/Backup.sql", "StoresAssistanceDB"}, new Hashmap<>());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.