Как выполнять команды unix через Windows / cygwin с использованием Java

Я пытаюсь выполнить две задачи:

  1. Я запускаю cygwin в Windows7 для выполнения команд оболочки unix, и мне нужно автоматизировать процесс, написав приложение Java. Я уже знаю, как использовать оболочку Windows через Java, используя «Класс процесса» и Runtime.getRuntime (). Exec («cmd / c dir») .Мне нужно иметь возможность делать то же самое с командами unix: например: ls -la и так далее. На что мне обратить внимание?

  2. Есть ли способ запомнить состояние оболочки? объяснение: когда я использую: Runtime.getRuntime (). exec ("cmd / c dir") , я всегда получаю список моего домашнего каталога. Если я сделаю Runtime.getRuntime (). Exec ("cmd / c cd ") , а затем сделаю Runtime.getRuntime (). Exec ("cmd / c dir") снова, я все равно получу список моей домашней папки. Есть ли способ указать процессу, чтобы он запомнил свое состояние, как это сделала бы обычная оболочка?


Похоже, что командная строка bash , предложенная Паоло, не работает:

C:\cygwin\bin>bash -c ls -la
-la: ls: command not found

Я не могу понять

Это мой код:

p = Runtime.getRuntime().exec("C:\\cygwin\\bin\\bash.exe -c ls -la");
reader2 = new BufferedReader(new InputStreamReader(p.getInputStream()));
line = reader2.readLine();

строка заканчивается нулевым значением.


Я добавил это в свой .bash_profile:

#BASH
export BASH_HOME=/cygdrive/c/cygwin
export PATH=$BASH_HOME/bin:$PATH

Я также добавил следующее:

Свойства системы -> расширенные -> Переменные среды -> пользовательские варианты -> переменная: BASH , значение: c: \ cygwin \ bin

По-прежнему ничего ...

Однако, если Вместо этого я выполняю это, оно работает!

p = Runtime.getRuntime().exec("c:\\cygwin\\bin\\ls -la ~/\"Eclipse_Workspace/RenameScript/files copy\"");
10
задан Paŭlo Ebermann 19 July 2011 в 21:53
поделиться