Почему ввод одной и той же команды в macOS bash дает другой результат, чем в сценарии jenkins bash

Я настраиваю работу jenkins freestyle с помощью шага сборки сценария bash с помощью команды ack. Почему я не получаю тот же результат, что и от команды bash в macOS?

Дженкинс настроен на эту macOS. Я использую версию sck 2.28. Я попытался указать точный путь к объявлению SCK.

DEVVER=$\(/usr/local/Cellar/ack/2.28/bin/ack /path/to/file/app.config.ts -o --match '(?<=devVersion = ")(\d+\.)(\d+\.)(\d+)'\)
echo ${DEVVER}

Ожидаемый результат:

1.9.16

Фактический результат:

/path/to/file/app.config.ts: line 1: export: `{': not a valid identifier
/path/to/file/app.config.ts: line 3: static: command not found
... (same for each line till 221;)
/path/to/file/app.config.ts: line 221: syntax error: unexpected end of file

person michal_lipski    schedule 13.06.2019    source источник
comment
homebrew обычно создает символические ссылки на каждый создаваемый им двоичный файл в /usr/local/bin, поэтому в целом, если вы поместите /usr/local/bin в свой PATH, вы можете просто использовать ack и все остальное, что homebrew устанавливает, не вводя весь этот путь. с /usr/local/Cellar/ack/2.28... Если хотите проверить, попробуйте ls -l /usr/local/bin/ack   -  person Mark Setchell    schedule 13.06.2019
comment
Я уже пробовал это, но это все еще дает тот же эффект, сначала возникла проблема, что я не смог использовать homebrew из учетной записи Jenkins. Сначала я установил его из учетной записи root. После смены доступа к доморощенному я смог использовать акк из аккаунта Дженкинса. Когда это не помогло, я попытался снова установить ack из учетной записи Jenkins, и он был установлен в /usr/local/Cellar/ack/2.28...   -  person michal_lipski    schedule 13.06.2019
comment
Ваш синтаксис неверен, у вас есть посторонняя обратная косая черта после первого знака доллара. Должно быть DEVVER=$(ack ...)   -  person Mark Setchell    schedule 13.06.2019
comment
Без него скобка закончится после первой закрывающей скобки (регулярное выражение) вместо последней закрывающей скобки для команды (переменной). Пробовал: /Jenkins/tmp/jenkins277369741079369146.sh: line 2: unexpected EOF while looking for matching )'`   -  person michal_lipski    schedule 13.06.2019
comment
Даже удаление обратной косой черты, это упоминается, и это перед последней закрывающей скобкой дает вывод: Empty changeset (manual trigger?), running build.   -  person michal_lipski    schedule 13.06.2019
comment
Вы также пропустили финальное закрытие )   -  person Mark Setchell    schedule 13.06.2019
comment
Где? $*(ack pathToFIle -o --match regex *)   -  person michal_lipski    schedule 13.06.2019
comment
Сначала напишите простую команду ack, например ack ABC XYZ, и протестируйте ее, пока она не напечатает то, что вы хотите, а затем окружите ее DEVVER=$(...).   -  person Mark Setchell    schedule 13.06.2019
comment
(Первый компакт-диск к местоположению файла) Хорошо, я попытался выполнить эту команду ack app.config.ts -o --match '(?<=devVersion = ")(\d+\.)(\d+\.)(\d+)' как оболочку, но она выдала такой вывод: Empty changeset (manual trigger?), running build \n Build step 'Execute shell' marked build as failure. Когда я набираю это в bash на Mac, я получаю вывод: 1.9.16   -  person michal_lipski    schedule 13.06.2019
comment
После еще одного расследования. Я написал простой скрипт bash #!/bin/bash function getVersion() { sudo chmod 777 /path/to/file/app.config.ts ack /path/to/file/app.config.ts -o --match '(?<=devVersion = ")(\d+\.)(\d+\.)(\d+)' } value=`getVersion` echo "$value" Когда я запускаю этот скрипт bash /path/to/script в bash, он работает, но запуск его в jenkins возвращает пустое значение. Не знаю, почему   -  person michal_lipski    schedule 14.06.2019
comment
В качестве обходного решения (не слишком хорошего) я изменил команду. Теперь я использую регулярное выражение grep -E, в котором я удалил ?<= и заменил spaces на . и вырезал несоответствующие символы в найденной строке.   -  person michal_lipski    schedule 17.06.2019


Ответы (1)


В качестве обходного решения (не слишком хорошего) я изменил команду. Теперь я использую grep -E "regex", в котором я удалил ?<= и заменил spaces на . и вырезал несоответствующие символы в найденной строке.

person michal_lipski    schedule 17.06.2019