Jenkins: специальные символы вставляются в скрипт bash - PullRequest
1 голос
/ 19 октября 2011

Я выполняю скрипт bash внутри.Подобная команда при выполнении

current_loc=/tmp/$BUILDTYPE
rm -rf $current_loc/*
[ -d $current_loc/ ] || mkdir -p $current_loc

Получить замену на

+ current_loc=$'/tmp/stage\r'
+ rm -rf '/tmp/stage
/*
'
+ '[' -d $'/tmp/stage\r/' ']'
+ mkdir -p $'/tmp/stage\r\r'

dollar quoting и \r создает хаос.Как это исправить?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2011

Существует несколько способов запуска сценария BASH в Jenkins. Способ № 1 - создать сценарий bash и заставить Дженкинса выполнить его как часть процесса сборки. Однако вы также можете ввести BASH-скрипт непосредственно в Jenkins. Как ты это делаешь?

Я подозреваю, что вы написали свой сценарий оболочки с помощью Блокнота в Windows, а затем выполняете его в Unix или в установке Cygwin, в которой заданы окончания строк Unix. \r, который вы видите, есть в самом сценарии вашей оболочки.

Вы можете заново отредактировать сценарий с помощью редактора программ, а затем установить окончание строки на конец строки Unix. В VIM вы можете сделать это:

:set ff=unix

в командном режиме.

Если вы используете Notepad ++ в Windows (скачать бесплатно и с открытым исходным кодом), вы выбираете пункт меню Edit->EOL Conversion->Unix. (Или вы можете использовать Vim )

Вы можете запустить утилиту dos2unix, которая есть в большинстве установок Unixes и Linux, но я все равно посмотрю сценарий в редакторе программ.

Не используйте непрограммный редактор для редактирования программы. Я видел, как люди используют Winpad и забывают сохранить скрипт как Text . Вместо этого они создают сценарий оболочки в формате RTF. RTF формат делает Unix BASH shell грустным.

0 голосов
/ 28 ноября 2011

Вы должны заменить символ '\ r' на команду, подобную

BULDTYPE=$(echo $BULDTYPE | tr -d '\r');

...