Когда я запускаю Java-программу вручную из терминала, она работает нормально, но не работает, когда я запускаю из Eclipse

Моя программа не запускается из Eclipse, но она работает через терминал в Ubuntu.

Ниже приведен скрипт оболочки, который я запускаю в Java

#!/usr/bin/env bash

# Running sqoop commands

s="$(sqoop help)"

echo "$s"

Ниже приведен код Java

package flexibility;

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

public class Flex {

    public static void main(String args[]) throws Exception {

        String s = null;
        String line = "";
        String sqoopCommand = "sqoop help";

        try {

            Process p = Runtime.getRuntime().exec("/home/avinash/sqoop.sh");
            p.waitFor();

            StringBuffer output = new StringBuffer();
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

            BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

            while ((line = stdInput.readLine()) != null) {
                output.append(line + "\n");

            }
            while ((line = stdError.readLine()) != null) {
                output.append(line + "\n");

            }
            System.out.println("### " + output);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

сообщение об ошибке:

/home/avinash/sqoop.sh: строка 5: sqoop: команда не найдена

2 ответа

Решение

Попробуйте с помощью команды "sh /home/avinash/sqoop.sh". Я чувствую, так как Ubuntu не знает, что это за файл, он явно выбрасывает команду not found error.

Сообщение об ошибке из вашего скрипта. Не из Затмения.

Eclipse (или, точнее, JVM) не знает о переменных среды или рабочем каталоге скрипта. Напротив: если вы запускаете скрипт из командной строки, переменные среды (например, PATH) или рабочий каталог известны.

Вы можете использовать метод Runtime.exec(String command, String[] envp, File dir) чтобы указать это в вашем коде Java. Я думаю, это должно сработать:

Process p = 
    Runtime.getRuntime().exec("/home/avinash/sqoop.sh", null, new File("/home/avinash/"));
Другие вопросы по тегам