Когда я пытаюсь построить эту команду на конвейере Jenkins, выдается ошибка об этом синтаксисе. Еще до того, как я выполнил эту команду, в поле формы Дженкинса появилось предупреждение с красным синтаксисом, говорящее о неожиданном символе: '\'.
Что я могу сделать для замены или исправления ошибки с этой обратной косой чертой?
Обратите внимание: у меня есть rm -fдля всех случаев в этот момент. Будет ли заменить все rm -fв findкоманде на папках очистки этапа.
ТКС заранее
этот гибридный слэш не поможет? `∖`
user902300 6 лет назад
0
Не могли бы вы опубликовать свой скрипт Groovy (или Pipeline, или что-то еще, что вы используете для запуска этой команды)?
jayhendren 6 лет назад
1
Вставил на вопрос тело заводной скрипт. @jayhendren
Marlon 6 лет назад
0
Поскольку символ косой черты просто избегает следующего, возможно, вам просто нужно удалить ir.
davidgo 6 лет назад
0
@davidgo в данном конкретном случае обратная косая черта определенно необходима, чтобы гарантировать, что точка с запятой анализируется командой find, а не shell.
jayhendren 6 лет назад
1
3 ответа на вопрос
3
Aarkon
Это может помочь избежать побега вашего персонажа, как бы забавно это ни звучало. Просто поместите еще одну обратную косую черту перед вашей обратной косой чертой:
stage ("cleaning folders"){ sh ''' find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \\; ''' }
По крайней мере, IntelliJ не помечает это как синтаксически неправильное.
Звук, который работал нормально. Tks!
Marlon 6 лет назад
0
0
jayhendren
На самом деле в вашем случае я бы даже не удосужился выяснить, как правильно убежать:
stage ("cleaning folders"){ sh ''' find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} + ''' }
Когда вы передаете точку с запятой -exec, команда find создает несколько команд, по одной для каждого результата операции поиска (например rm -f /root/logfiles/instance/file1.log, rm -f /root/logfiles/instance/file2.log...), но когда вы используете плюс, команда find создает одну команду с несколькими аргументами, что намного эффективнее и быстро (например rm -f /root/logfiles/instance/file1.log /root/logfiles/instance/file2.log ...). См. Справочную страницу для поиска более подробной информации (извините, я не могу процитировать справочную страницу или предоставить более подробную информацию прямо сейчас; я на мобильном телефоне).
0
jikuja
Одним из решений было бы использовать долларовую косую черту, которая отключает интерполяцию строк и заменяет escape-символ на $.
stage ("cleaning folders"){ sh script: $/ find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \; /$ }