2015-01-08 2 views
0

У нас есть приложение. Как часть приложения - у нас есть набор bash-скриптов.Maven build разлагает скрипты bash?

Sctips сейчас находятся в тар-архиве:

$ ls -l manager/ 
total 3076 
-rwx------+ 1 Administrators Domain Users 3123200 Jan 8 15:47 manager.tar 

Затем, после TeamCity сборки, Maven создает банку-файл как "manager.jar", который включает в себя "manager.tar "внутри.

После распаковки банки, а затем смолы - все работает.

Но!

Если поместить Баш-скрипты без упаковки их в тар-архиве - после сборки и распаковки JAR-файла - у меня всегда очень странное сообщение об ошибке:

$ ./manager.sh -h 
: No such file or directory 

$ bash -x manager.sh 
+ $'\r' 
: command not foundne 2: 
+ $'\r' 
: command not foundne 10: 
'anager.sh: line 11: syntax error near unexpected token `{ 
'anager.sh: line 11: `setbase() { 

Хотя - как manager.sh сценариев (от обоих сборок) выглядит таким же (diff & & vimdiff).

UPD

При удалении всех 'перевода строки' в сценарии - это, кажется, работа, маленький пример:

setbase() { if [ "$1" = "SIT" ]; then 

, а затем исполнение с -xv:

setbase() { if [ "$1" = "SIT" ]; then 
    export BASEDIR="/home/user/APP" 
    export smem="32G" 
    export xmem="32G" 
elif [ "$1" = "DEV" ]; then 
manager/manager.sh: line 13: syntax error near unexpected token `elif' 
'manager/manager.sh: line 13: `elif [ "$1" = "DEV" ]; then 

Но VIM таких символов, как ^M , А также - как файл в той же кодировке:

(это одна работа)

$ file -ib /home/user/APP/manager/manager.sh 
text/x-java charset=us-ascii 

(это один - нет)

$ file -ib manager/manager.sh 
text/x-java charset=us-ascii 

ответ

1

Проблема не DOS окончания строк. Это может быть связано с упаковкой банкомата, или ваши новые скрипты могут быть только единственными файлами, заканчивающимися в DOS. В любом случае исправьте это.

+0

Я думал об этом - но кажется нет ... TeamCity buildAgents работает под Linux; скрипты не содержат символов^M или как это ... Но - есть действительно проблема со специальными символами - newline ... Если удалить все «новые строки» в скрипте - это почти работает. – setevoy

+1

'$ '\ r'' - артефакт конца строки DOS. Итак, ': command not foundne 10:' (что само переписывает ошибку). Эти файлы имеют окончание строк DOS. Если оригиналы не сделали, то что-то (возможно, создание банки) преобразует их. –

+0

Вау ... Действительно ... Я просто ... даже с ': set list' - vim не отображает' \ r' ... Таким образом - я не могу их удалить. И, конечно, тогда вопрос - откуда он вообще появляется? – setevoy