masalah dengan perintah git menyalahkan menggunakan program Java

Saya mencoba menjalankan perintah git di bawah ini menggunakan program Java di windows.

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

itu memberi saya kesalahan:

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

Saat menjalankan perintah ini dari command prompt, ini memberi saya hasil sesuai keinginan.

Tolong bantu!


person Manish Mankar    schedule 03.07.2015    source sumber


Jawaban (1)


Pada CMD di Windows, saya bisa membuatnya berfungsi menggunakan tanda kutip ganda untuk parameter awk:

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

Perhatikan bahwa awk.exe saya berasal dari Gnu On Windows.

OP menyebutkan penggunaan perintah itu di Java dengan:

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

Namun Anda tidak pernah meneruskan semua parameter sebagai string tunggal.
Gunakan array, seperti pada "Menggunakan Kutipan dalam getRuntime().exec" dan di "Bagaimana cara membuat pipa berfungsi dengan Runtime.exec()?"

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

Hindari tanda kutip ganda di 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
Terima kasih VonC, ini berfungsi melalui CMD tetapi ketika menjalankannya dari program Java menggunakan Java Runtime maka ia memberikan kesalahan yang disebutkan.: fatal: tidak dapat stat path '$7}'': Tidak ada file atau direktori tersebut - person Manish Mankar; 03.07.2015
comment
@ManishMankar kode Java persis apa yang Anda gunakan untuk meneruskan parameter ke perintah java Runtime.exec()? - person VonC; 03.07.2015
comment
String commandToBeExecuted=git --git-dir D:\code_coverage\.git menyalahkan 'src/RunCodeCoverage.java' | grep e4ecfbe | awk {cetak $7}'; Proses p = Runtime.getRuntime().exec(commandToBeExecuted); - person Manish Mankar; 03.07.2015
comment
@ManishMankar Saya telah mengubah jawabannya - person VonC; 03.07.2015
comment
Terima kasih@VonC! tetapi saya masih mendapatkan masalah fatal: tidak dapat menentukan jalur ''src/RunCodeCoverage.java'': Tidak ada file atau direktori seperti itu - person Manish Mankar; 03.07.2015
comment
@ManishMankar tambahkan direktori induk yang tepat sebagai parameter ketiga exec()(docs.Oracle.com/javase/6/docs/api/java/lang/ ): stackoverflow.com/a/6811578/6309 - person VonC; 03.07.2015