Я пытаюсь выполнить две задачи:
Я запускаю cygwin в Windows7 для выполнения команд оболочки unix, и мне нужно автоматизировать процесс, написав приложение Java. Я уже знаю, как использовать оболочку Windows через Java, используя «Класс процесса» и Runtime.getRuntime (). Exec («cmd / c dir»)
.Мне нужно иметь возможность делать то же самое с командами unix: например: ls -la
и так далее. На что мне обратить внимание?
Есть ли способ запомнить состояние оболочки?
объяснение: когда я использую: 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\"");