Записать в файл с помощью команд через программу Java на Mac OS X - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь записать переменную в ~/.bash_profile, используя такие команды, как echo, но я не могу записать ее в файл.Я попробовал следующее,

Runtime run = Runtime.getRuntime();
    String line = null;
    try {
        Process pr = run.exec("echo \"export ANDROID_HOME=/Users/abc/Documents/platform-tool\" >> ~/.bash_profile");
        pr.waitFor();
        BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
        while ((line = buf.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        logger.error("Error occurred when getting adb " + e.getMessage());
    } catch (InterruptedException ie) {
        logger.error("Error occurred when getting adb " + ie.getMessage());
        Thread.currentThread().interrupt();
    }

Я также попытался дать «вместо \» и просто экспортировать эхо, но он не записывает в этот файл. Когда я пытаюсь распечатать вывод, он печатает

"export ANDROID_HOME=/Users/abc/Documents/platform-tool" >> ~/.bash_profile

Но файл пуст.

Я также пытался использовать printf, но это опять-таки не работает. Также эти команды работают в терминале, но, используя в Java, это не запись в файл.

Буду признателен за любую помощь, и если есть другие методы, чем я использую, пожалуйста, предложите

1 Ответ

0 голосов
/ 16 октября 2018

Когда вы делаете echo foo >> bar в Терминале, есть два важных различия:

  • echo - это встроенная команда bash (в отличие от /bin/bash, котораяможно найти в PATH) - но это не очень важно, поскольку оба ведут себя одинаково;и

  • >> обрабатывается bash и не передается echo в качестве параметра для печати.Это bash, который обрабатывает анализ командной строки, обрабатывает перенаправление и кучу других вещей, таких как обработка подстановки переменных.В этом случае Java анализирует командную строку и передает их непосредственно программе.

По сути, вы выполняете:

'/bin/echo' '"export ANDROID_HOME=/Users/abc/Documents/platform-tool\"' '>>' '~/.bash_profile'

Если выпопробуйте , чтобы в Терминале, он будет делать то же, что и ваш эхо, вызванное Java.

Для того, чтобы делать то, что вы хотите, вам нужно запустить оболочку (например, bash) для обработки перенаправления:

run.exec("bash -c 'echo \"export ANDROID_HOME=/Users/abc/Documents/platform-tool\" >> ~/.bash_profile'")

Тем не менее, естественный вопрос, который нужно здесь задать, - зачем использовать Java для вызова bash для вызова echo ...? Почему бы просто не использовать Java? ( Как добавить текст в существующий файл в Java )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...