Как ProcessBuilder и Runtime.getRuntime().exec(cmd) зависят от команд Bash и Sh?

#java #bash #docker #shell #sh

#java #bash #docker #оболочка #sh

Вопрос:

Все эти строки отлично работают без docker на Mac, но не работают в среде DOCKER.

 try {
            log.info("FileSortHelper.sortResultFile start the file name is {}", resultFilePath);
            final String[] cmd = {
                FileServiceConstants.BASH, FileServiceConstants.SORTING_SCRIPT_PATH.toString(),
                resultFilePath };
            log.info("FileSortHelper.sortResultFile  Command run {}",
                cmd[0]   " "   cmd[1]   " "   cmd[2]);

            final long startTime = System.currentTimeMillis();
            final Process process = runtime.exec(cmd);
            process.waitFor();
            bufferedReader = new BufferedReader(
                    new InputStreamReader(process.getInputStream(), Charset.defaultCharset()));

            MDC.put(MdcConstants.PERF_MATRIX_TIME_TAKEN_FOR_SORTING_RESULT_FILE,
                String.valueOf(System.currentTimeMillis() - startTime));

            final StringBuilder responseFromScript = new StringBuilder();
            // Collect all the echo statement and print in logs
            while (bufferedReader.ready()) {
                responseFromScript.append(bufferedReader.readLine());
            }
            log.info("FileSortHelper.sortResultFile Response received from script: {}",
                responseFromScript);
            log.info("FileSortHelper.sortResultFile Exit code received from script: {}",
                process.exitValue());

        }
 

Ниже приведена другая комбинация, которую я тестировал. Извините, если это очень простой вопрос.

 final String[] cmd ={"sh", SCRIPT_PATH.toString(), resultFilePath};
//Error cases received response : exit status 2
ProcessBuilder processBuilder = new ProcessBuilder();
        processBuilder.command("bash", "-c", DST_PATH.toString(), resultFilePath);

//Error cases received response : exit status 2
final Process process = Runtime.getRuntime().exec(cmd);

//Success cases received response : exit status o
processBuilder.command("bash", DST_PATH.toString(), resultFilePath);
 

Комментарии:

1. Что вы подразумеваете под сбоем? Вы получаете какую-либо ошибку? Если да, пожалуйста, скопируйте сообщение об ошибке.

2. process.exitValue() = 2 Я получаю