проблема с командой git fault с использованием программы Java

Я пытаюсь запустить команду ниже git, используя java-программу в Windows.

 git --git-dir D:\code_coverage\.git blame  'src/RunCodeCoverage.java'
 | grep e4ecfbe | awk '{print $7}'

это дает мне ошибку:

fatal: cannot stat path '$7}'': No such file or directory

При запуске этой команды из командной строки она дает желаемые результаты.

Пожалуйста помоги!


person Manish Mankar    schedule 03.07.2015    source источник


Ответы (1)


В CMD в Windows я могу заставить его работать, используя двойные кавычки для параметров awk:

 git --git-dir D:\code_coverage\.git blame  'src/RunCodeCoverage.java'
 | grep e4ecfbe | awk "{print $7}"

Обратите внимание, что мой awk.exe взят из Gnu On Windows.

В OP упоминается использование этой команды в Java с помощью:

String commandToBeExecuted="git --git-dir D:\code_coverage\.git blame 'src/RunCodeCoverage.java' | grep e4ecfbe | awk "{print $7}"'"; 
Process p = Runtime.getRuntime().exec(commandToBeExecuted);

Но вы никогда не передаете все параметры в виде одной строки.
Используйте массив, как в "Использование кавычек в getRuntime().exec" и в разделе "Как заставить каналы работать с Runtime.exec()?"

Process p = Runtime.getRuntime().exec(new String[]{"cmd", "/c", commandToBeExecuted);

Избегайте двойных кавычек в commandToBeExecuted:

 commandToBeExecuted = "git --git-dir D:\code_coverage\.git blame  'src/RunCodeCoverage.java'
 | grep e4ecfbe | awk \"{print $7}\""
person VonC    schedule 03.07.2015
comment
Спасибо VonC, он работает через CMD, но при запуске из java-программы с использованием java Runtime выдает указанную ошибку: фатальный: невозможно указать путь '$ 7}'': нет такого файла или каталога - person Manish Mankar; 03.07.2015
comment
@ManishMankar, какой именно код Java вы используете для передачи параметров команде java Runtime.exec()? - person VonC; 03.07.2015
comment
Строка commandToBeExecuted=git --git-dir D:\code_coverage\.git виноват 'src/RunCodeCoverage.java' | grep e4ecfbe | awk {печать $7}'; Процесс p = Runtime.getRuntime().exec(commandToBeExecuted); - person Manish Mankar; 03.07.2015
comment
@ManishMankar Я изменил ответ соответственно - person VonC; 03.07.2015
comment
Спасибо @VonC! но все еще получаю фатальную проблему: невозможно указать путь ''src/RunCodeCoverage.java'': нет такого файла или каталога - person Manish Mankar; 03.07.2015
comment
@ManishMankar добавляет правильный родительский каталог в качестве третьего параметра exec()(docs.oracle.com/javase/6/docs/api/java/lang/ ): stackoverflow.com/a/6811578/6309 - person VonC; 03.07.2015