<< отредактировано в ответ на комментарий >>
1.Чистое решение Groovy
Если вы просто хотите реализовать функциональность вашего bash-скрипта в groovy, вы можете сделать что-то вроде этого:
def processName = 'spin_user'
def outLog = new File('/tmp/output.log')
def finalLog = new File('final_output.log')
def lines = outLog.readLines()
def hasProcess = { it.toLowerCase().contains(processName) }
if(lines.any(hasProcess)) {
println "Sucess"
finalLog.text = lines.findAll(hasProcess).join('\n')
} else {
println "failure"
}
следует отметить, что если ваш журналФайл большой, есть лучшие способы поиска строки, которые не требуют загрузки всего файла в память.
2.Process Management Solution
Если вы специально пытались использовать команду linux system grep
изнутри groovy, вышеприведенное, естественно, вам не поможет.Следующий отличный код:
import java.util.concurrent.*
def processName = 'spin_user'
def outLog = '/tmp/output.log'
def finalLog = 'final_output.log'
def result = exec('grep', '-i', processName, outLog)
if (result) {
println "success"
new File(finalLog).text = result
} else {
println "failure"
}
String exec(String... args) {
def out = new StringBuffer()
def err = new StringBuffer()
def process = args.toList().execute()
process.consumeProcessOutput(out, err)
process.waitForOrKill(5000)
if (err) {
println "ERROR: executing ${args} returned ${process.exitValue()}"
println "STDERR: ${err}"
}
out
}
выполнит команду grep
и приблизит вас к тому, что вы хотите.
Следует отметить, что перенаправление вывода >
в вашей командной оболочке, насколько я знаю, трудно сделать для внешнего процесса из java / groovy, и поэтому мы записываем вывод в final_output.log
файл изнутри groovy вместо выполнения команды с использованием перенаправления вывода.
Я также добавил максимальное время ожидания в пять секунд при выполнении процесса grep
.Это не требуется, и эта строка может быть безопасно удалена, это просто как гарантия для случаев, когда grep блокируется бесконечно.