невозможно запустить скрипт в Mac OS через Java-программу - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь запустить скрипт оболочки через Java в Mac OS. В сценарии оболочки есть команда git clone clone и репозиторий.

Я пробовал использовать API построителя процессов. Это не дает никаких исключений, но репо не клонируется, когда я запускаю код.

public class Test {
public static void main(String[] args) throws IOException  {

    Process p;
    try {

        List<String> cmdList = new ArrayList<String>();

        cmdList.add("/Users/Folder/AnotherFolder/Another/Final/clone.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 (Exception e) {

        e.printStackTrace();
        System.out.println(e.getMessage());
    } 
}

}

Ожидается клонирование проекта git в пути, но не выводятся какие-либо выходные данные или исключения.

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Вы игнорируете все сообщения об ошибках, генерируемые вашим сценарием.

Удалите все использования p.getInputStream() и замените его вызовом inheritIO () :

try {
    ProcessBuilder pb = new ProcessBuilder(
        "/Users/Folder/AnotherFolder/Another/Final/clone.sh");

    pb.inheritIO();

    p = pb.start();
    p.waitFor();
} catch (IOException | InterruptedException) {
    e.printStackTrace();
}

Когда вы звонили p.getInputStream(), вы читали только стандартный вывод процесса. inheritIO() приведет к тому, что как стандартный вывод, так и стандартная ошибка дочернего процесса появятся в собственном стандартном выводе процесса Java и стандартной ошибке. Это позволит вам увидеть все диагностические сообщения, напечатанные скриптом. В частности, сообщения об ошибках обычно появляются при стандартной ошибке, а не при стандартном выводе.

0 голосов
/ 17 октября 2019

Выше JAVA-кода работает нормально, я подозреваю, что могут быть некоторые проблемы со сценарием. Потому что локальное хранилище git не будет знать, когда java-программа пытается выполнить сценарий оболочки.

При выполнении программы с помощью приведенного ниже сценарияgit clone работает отлично.

#!/bin/bash
mkdir ~/repo
cd ~/repo
git init
#git config user.email "email"
#git config user.name "user"
/usr/local/bin/git clone https://github.com/divaibhav/helloworld
...