Невозможно запустить несколько команд в терминале Java

Я не могу запускать несколько команд, используя символы «&&», «&», «||», «;» Я проверил почти каждый вопрос, который задавал этот вопрос, и все еще не мог найти ответа на свою проблему. Я могу успешно выполнить одну команду в командной оболочке java, но не более 1. Заранее благодарим за помощь!

try {

                Process process = Runtime.getRuntime().exec("g++ " + projPath +" -o " + name + " && ./" + name);
                StringBuilder output = new StringBuilder();

                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(process.getInputStream()));
                
                BufferedReader errinput = new BufferedReader(
                        new InputStreamReader(process.getErrorStream()));

                String line;
                String err;
                while ((line = reader.readLine()) != null) {
                    output.append(line + "\n");
                }
                while ((err = errinput.readLine()) != null) {
                    output.append(err + "\n");
                }

                int exitVal = process.waitFor();
                if (exitVal == 0) {
                    acc.setExpandedPane(pane1);
                    txt.setStyle("-fx-text-fill: black;");
                    txt.setText(output.toString());
                } else {
                    acc.setExpandedPane(pane1);
                    txt.setStyle("-fx-text-fill: red;");
                    txt.setText(output.toString());
                }

            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Java не предоставляет оболочка, он просто разбивает предоставленную строку на слова и передает ее в качестве аргументов исполняемому файлу, указанному как первое слово.

Попробуйте передать команду /bin/bash (или другой оболочке по вашему выбору):

final String innerCommand = "g++ " + projPath +" -o " + name + " && ./" + name;
final String[] command = {"/bin/bash", "-c", innerCommand};
final Process process = Runtime.getRuntime().exec(command);

Хорошо, спасибо, это сработало! Извините, мне было трудно найти это в Интернете.

Benjamin Sloutsky 04.04.2021 09:08

Другие вопросы по теме