Как выполнить сценарии оболочки UNIX из приложения Java? - PullRequest
0 голосов
/ 21 февраля 2012

Кто-нибудь знает, как выполнить скрипт оболочки из Java-приложения?Я использую Win 7 для разработки Java-приложения, и файл скрипта находится на моем жестком диске.

Ответы [ 3 ]

3 голосов
/ 21 февраля 2012

Надеюсь, что это послужит вашей цели:

import java.io.IOException;
import java.io.InputStream;

public class RunShellScript {

    public static void runShellScript(String unixCommand) throws IOException, InterruptedException {
        ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", unixCommand);
        processBuilder.redirectErrorStream(true); 
        Process shellProcess = processBuilder.start();
        InputStream inputStream = shellProcess.getInputStream(); 
        int consoleDisplay;
        while((consoleDisplay=inputStream.read())!=-1) {
            System.out.println(consoleDisplay);
        }
        try {
            inputStream.close();
        } catch (IOException iOException) { }
    }

    public static void main(String[] args) throws IOException, InterruptedException {
        String unixCommand = "sh hello-world.sh"; 
        runShellScript(unixCommand);
    }
}

Выше кода запустит скрипт, включенный в файл hello-world.sh, и отобразит вывод на консоли скрипта оболочки.

1 голос
/ 21 февраля 2012

Вы будете использовать семейство методов exec() в классе java.lang.Runtime.Конечно, вы не можете выполнить сценарии оболочки UNIX на вашем компьютере с Windows, не загрузив программное обеспечение, такое как MinGW или Cygwin, чтобы поддержать это (возможно, вы имеете в виду, что вы собираетесь выполнить сценарий, когда ваша программа запускается на другом компьютере.)

0 голосов
/ 21 февраля 2012

Во-первых, для выполнения сценария оболочки Unix в вашей системе Windows 7 вам потребуется оболочка Unix.Есть несколько доступных, включая Cygwin.Предполагая, что вы используете bash (наиболее распространенная в наши дни), команда для выполнения будет bash -c scriptname для выполнения вашего скрипта.Если вы просто запускаете Windows cmd или bat-файл, команда выглядит примерно так: cmd /c scriptname Вам следует проверить справку для cmd, чтобы убедиться в этом.

Как только вы запустите процесс, вам нужно немедленно запустить потокначать читать его стандартный вывод.Вам нужно получить поток вывода из процесса и начать чтение из него.Если вы этого не сделаете, канал между двумя процессами заполнится и подпроцесс зависнет.Вы также должны сделать то же самое для stderr дочернего процесса, если только вы не используете опцию для объединения двух потоков при создании процесса.

...