неожиданный маркер '.'при выполнении команды оболочки при изменении расширения файла в скрипте groovy - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь запустить следующую команду в скрипте .groovy:

sh """#!/bin/bash -ex
    find .. -name "*.gcda" | \
    xargs -I {} sh -c 'file=${0}; echo "${file%.*}".gcno' {} | \
    xargs -I {} sh -c 'gcov {} -o "\$(dirname {})"' \\;
"""

Не самая красивая команда, но я нахожу список .gcda имен файлов, меняя эти строки навместо этого используйте .gcno расширения, а затем, наконец, выполните команду для .gcno версии имени файла.

Ошибка, которую я получаю:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 92: unexpected token: . @ line 92, column 60.
   h -c 'file=${0}; echo "${file%.*}".gcno'
                                 ^

1 error

Эта команда отлично работает, когда я запускаю ее в терминале, она просто жалуется, когда я выполняю ее в Jenkins. Я пытался избежать нескольких вещей, но не мог понять это.

1 Ответ

1 голос
/ 24 октября 2019

Вот более простой способ воспроизвести вашу проблему:

unexpected token: . @ line 1, column 14.
   """ echo ${1%.} """
                ^

Это происходит потому, что ${..} в строках Groovy с двойными кавычками используются для интерполяции строк. Вместо этого вы хотите, чтобы Groovy оставил их в покое, чтобы оболочка могла их интерпретировать.

Это можно сделать с помощью тройных одинарных кавычек, поскольку Groovy не выполняет интерполяцию строк в них (но, в отличие от самого bash, он по-прежнему интерпретирует обратную косую черту). ):

sh '''#!/bin/bash -ex
    find .. -name "*.gcda" | \
    xargs -I {} sh -c 'file=${0}; echo "${file%.*}".gcno' {} | \
    xargs -I {} sh -c 'gcov {} -o "$(dirname {})"' \\;
'''
...