Как выполнить команду оболочки в Groovy и получить код возврата $?

#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>
$