#shell #groovy #return-value
#оболочка #groovy #возвращаемое значение
Вопрос:
Я не могу получить код возврата (не вывод или ошибку) при выполнении сценария оболочки в Groovy.
Для всего, что я пробовал, он либо просит меня экранировать, либо просто напечатать $? вместо того, чтобы дать мне 1 или 0.
groovy: 75: недопустимый символ тела строки после знака доллара; решение: либо экранировать буквальный знак доллара » $ 5″, либо заключить в скобки выражение значения «$ {5}» @ строка 75, столбец 24.
Ниже приведены решения, которые я пробовал, все они не работают.
println "../src/check_job_log.s ${it}.log".execute().text
println "Check log ${it}.log completed"
//assert ("echo $?".execute().text == "1")
//output = """echo $?""".execute().text
println(['echo', '$?'].execute().text)
// below is code for @that other guy
//def process = "echo hello world".execute()
def process = "../src/check_job_log.s ${it}.log".execute()
print "Output: " process.text
print "Exit code: " process.exitValue()
Output: Exit code: 01
Ответ №1:
Используйте Process.exitValue()
вместо (или в дополнение к) .text
:
def process = "echo hello world".execute()
print "Output: " process.text
print "Exit code: " process.exitValue()
Комментарии:
1. $ksh ../src/check_job_log.s sb_sp_get_ucd_test.sql.log $echo $? 0
2. Ваш вывод кода: Вывод: Код выхода: 01. Но, как вы можете видеть выше, вывод из командной строки: 0. Почему это 01 и 0 разные?
3. Вывод из моего кода должен быть
Output: hello world
,Exit code: 0
. Вы получаете что-то еще?4. Я заменяю ваш hello world своим кодом, правильного вывода нет, но код выхода (01) отличается от того, что я запускаю тот же скрипт из командной строки, который равен 0. Я также тестировал ваш код, код выхода равен 01, а не 0.
5. Доброго дня groovy
Ответ №2:
Почему эти команды имеют разные выходные данные?
$../src/check_job_log.s dml_ucd_test.sql.log
/iiss/prod/sql>
$echo $?
1
/iiss/prod/sql>
$../src/check_job_log.s dml_ucd_test.sql.log | echo $?
0
ops@uaiisst3:/iiss/prod/sql>
$