Проблемы при запуске команды AWS CLI bash в Java - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь запустить команду AWS в коде Java (в Linux). Как всегда, я пытаюсь выполнить команду bash, например, в Java. Но мне интересно, это ничего не показывает. И просто печатает Exited with error code : 2. Когда я просто запускаю aws ls help в bash, это работает.

В чем проблема? Как это решить?

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

public class TestCMD {
        public static void main(String[] args) {
                ProcessBuilder processBuilder = new ProcessBuilder();
                processBuilder.command("bash", "-c", "aws ls help");

                try {
                        Process process = processBuilder.start();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

                        String line;
                        while ((line = reader.readLine()) != null) {
                                System.out.println(line);
                        }
                        int exitCode = process.waitFor();
                        System.out.println("\nExited with error code : " + exitCode);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}

1 Ответ

1 голос
/ 13 марта 2020

Код Java не проблема. Он отлично работает, что вы можете проверить, заменив command на

processBuilder.command("bash", "-c", "echo 1 2 3");

У вас есть 2 "проблемы". Первая проблема заключается в том, что aws записывает свои выходные данные в stderr, а не в stdout.
Вторая проблема заключается в том, что aws возвращает 2, где 0 будет ИМХО лучше.
Вы можете проверить это в командной строке с помощью :

aws ls help 2>/dev/null; echo $?

Проблемы могут быть исправлены с помощью

processBuilder.command("bash", "-c", "/usr/bin/aws ls help 2>&1; true");
...