2014-05-20 2 views
0

내 Windows 컴퓨터에서 cygwin에서 실행하는 bash 코드가 있습니다. 내 팀 동료가 자신의 컴퓨터에 완벽하게 다음 코드를 실행하지만 내 다음과 같은 오류에서 제공된다 : 여기 Error : done <<(찾을. - 이름 "* .jar")

$ bash addmvn.sh 
addmvn.sh: line 6: syntax error near unexpected token `done' 
'ddmvn.sh: line 6: `done < <(find . -name "*.jar") 

우리가

while read line 
do 
    echo $line; 
    jar=`basename $line` 
    mvn install:install-file -Dfile=$line -DgroupId=com.strategyard.thirdparty -DartifactId=$jar -Dversion=1.0 -Dpackaging=jar 
done < <(find . -name "*.jar") 
+2

쉘에 있습니까? 그냥'bash'를 대신 사용하십시오. – fedorqui

+1

예를 들어 다른 것들 (예를 들어'#!/bin/sh'과 같이) 대신에이 shebang'#!/bin/bash'와 함께 bash를 사용하십시오. –

+0

프로젝트에 애그리 게이터 pom을 사용하고 단지 하나의'mvn install'을하십시오. – khmarbaise

답변

0

스크립트는 각 라인의 끝에 라인 피드 (때로는 작성 "\ ​​연구 \ n") 다음에 캐리지 리턴으로, DOS/윈도우 형식으로 저장됩니다; 유닉스는 줄 끝에서 라인 피드 ("\ n")를 사용하기 때문에 bash는 명령어의 일부분에 대해 캐리지 리턴을 착각하고있다. 이

while read line\r 
do\r 

를 볼 때이 키워드 단지 일반 명령으로 "\ r을을"인식하지 못하는, 그래서 그것은 "할"키워드를 찾고 앞으로 계속됩니다. 대신 "완료"라고 표시되면 혼란스럽고 오류가 발생합니다.

BTW, 나는이 말할 수있는 방법은 문제가 가까운 인용 오히려 말보다 줄의 시작 부분에 있음을

'ddmvn.sh: line 6: `done < <(find . -name "*.jar") 

참고 오류에서이다.

addmvn.sh: line 6: `done < <(find . -name "*.jar")\r' 

... 그리고 가까운 따옴표가 "A"의 스크립트 이름을 덮어 있도록 캐리지 리턴 라인의 시작 부분으로 다시 보내고있다 : 즉, 실제 오류가 있음을 알려줍니다.

해결 방법 : 스크립트를 유닉스 형식으로 변환하십시오. dos2unix 명령을 사용할 수 있다고 생각하지만 대안을 찾아야 할 수도 있습니다. 꼬집음으로

perl -pi -e 's/\r\n?/\n/g' /path/to/script 

(http://www.commandlinefu.com/commands/view/5088/convert-files-from-dos-line-endings-to-unix-line-endings 참조)을 사용할 수 있습니다. 그런 다음 DOS 대신 유닉스 형식으로 저장하는 텍스트 편집기로 전환하십시오.

-1

으로 시도 우리의 프로젝트에 받는다는를 설치하는 데 사용하는 코드는 이 :

while read line 
do 
     echo $line; 
     jar=`basename $line` 
     mvn install:install-file -Dfile=$line -DgroupId=com.strategyard.thirdparty -DartifactId=$jar -Dversion=1.0 -Dpackaging=jar 
done <<< $(find . -name "*.jar") 
+0

오류는 프로세스 대체를 지원하지 않는 셸이 사용되고 있음을 나타냅니다.이 경우 여기의 문자열이 인식되지 않을 수도 있습니다. – chepner

+0

그래서 내 질문을 삭제합니까? – Helio

관련 문제