Как написать код на Java для запуска сценария оболочки Unix, который использует rSync для внутреннего использования в среде Windows, используя Cygwin? - PullRequest
0 голосов
/ 23 марта 2012

Я использую Cygwin для получения среды Unix на Windows.

У меня есть сценарий оболочки, который запускается на Cygwin для выполнения операций синхронизации и других вещей. Я хочу выполнить эти сценарии через код Java.

Также во время выполнения сценариев на cygwin некоторая информация отображается на терминале с помощью простой команды echo. Я хочу показать всю эту информацию в моем приложении. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Используйте класс Runtime для запуска Cygwin. Это очень хрупко и зависит от вашей настройки, но на моей машине я бы сделал:

Runtime r = Runtime.getRuntime();
Process p = r.exec("C:\\dev\\cygwin\\bin\\mintty.exe --exec /cygpath/to/foo.sh");

Затем дождитесь завершения процесса и получите дескриптор его объектов InputStream, чтобы увидеть, что было отправлено в stdout и stderror.

Первая часть команды - запустить cygwin, а вторая - выполнить какой-либо скрипт или команду (используя -e или --exec). Я бы протестировал эту команду в командной строке DOS, чтобы проверить, работает ли она в первую очередь, прежде чем вырезать какой-либо код. Кроме того, посмотрите на доступные варианты, выполнив:

C:\dev\cygwin\bin\mintty.exe --help

Также из командной строки DOS.

РЕДАКТИРОВАТЬ: Следующее работает для меня, чтобы напечатать информацию о версии


public class RuntimeFun {
   public static void main(String[] args) throws Exception {
      Runtime r = Runtime.getRuntime();
      Process p = r.exec("C:\\dev\\cygwin\\bin\\mintty.exe --version");
      p.waitFor();

      BufferedReader buf = new BufferedReader(
               new InputStreamReader(
                        p.getInputStream()));
      String line = buf.readLine();
      while (line != null) {
          System.out.println(line);
          line = buf.readLine();
      }
   }
}

К сожалению, не получается заставить его работать с --exec, поэтому вам придется провести там еще какое-то исследование.

0 голосов
/ 23 марта 2012

Вы можете использовать что-то вроде этого

String cmd = "ls -al";
Runtime run = Runtime.getRuntime();
Process pr = run.exec(cmd);
pr.waitFor();
BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
while ((line=buf.readLine())!=null) {
    System.out.println(line);
}

p.s. это не обрабатывает ошибки

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