В этом случае вы можете попробовать токенизировать ваш конвейер команд в список команд и выполнять их последовательно, пока они возвращают код выхода 0
(&&
останавливает конвейер команд, когда команда возвращает ненулевой код выхода). Рассмотрим следующий пример:
def cmd = 'echo test && echo foo && exit 1 && echo 123'
cmd.tokenize('&&').every {
try {
def p = it.execute()
def output = p.text.trim()
p.waitFor()
println output
return p.exitValue() == 0
} catch (e) {
return false
}
}
Здесь у нас есть конвейер из 4 команд:
echo test
echo foo
exit 1
echo 123
Связывание этих команд с оператором AND (&&
) предполагает останов конвейера после exit 1
.
Метод Groovy Iterable.every(Closure closure)
выполняется до тех пор, пока возвращаемый предикат равен true
. В нашем случае мы продолжаем перебирать список команд, пока код выхода равен 0
.
Выполнение приведенного выше примера приводит к выводу на консоль:
test
foo