2013-04-19 3 views
0

실행해야하는 명령을 동적으로 구성 할 bash 스크립트를 wirte하려고합니다. 여기, 명령 줄을 구축 할 수있어 지금까지bash 스크립트에서 큰 따옴표를 처리하십시오.

을 (lcov 파일을 병합하는) 결과 : 내 쉘에서 echo 출력이 작동 라인을 실행할 수 있지만 경우

#!/bin/bash 
LCOV_INPUT_FILES="" 
while read FILENAME; do 
    LCOV_INPUT_FILES="$LCOV_INPUT_FILES -a \"$FILENAME\"" 
done < <(find ../reports/coverage -name lcov.info) 

echo lcov "${LCOV_INPUT_FILES}" -o ../reports/coverage.lcov 
lcov "${LCOV_INPUT_FILES}" -o ../reports/coverage.lcov 

그럴 수 없어 내 스크립트에서이 명령을 실행해라. 그리고 나는 그것을 디버깅 할 bash 위대함이 없다.

lcov -a "../reports/coverage/Chrome 26.0 (Linux)/lcov.info" -a "../reports/coverage/Firefox 20.0 (Linux)/lcov.info" -a "../reports/coverage/PhantomJS 1.8 (Linux)/lcov.info" -o ../reports/coverage.lcov 

당신이 여기 잘못 될 수 있는지 알고 있습니까 : 여기

내가 에코에서 얻을 출력의 종류입니까?

감사합니다,

자비

답변

3

큰 따옴표 "${LCOV_INPUT_FILES}"를 사용하는 경우, bash는 하나 개의 단어로 전체 문자열을 처리합니다. 큰 따옴표가 없으면 bash는 변수의 값을 공백으로 나눕니다.

eval lcov "$LCOV_INPUT_FILES" -o ... 

도 다른 옵션이 있습니다 : 방법에 대한

당신은 유일한 옵션이 eval을 사용하는 것입니다 문자열을 건설했다. 당신은 큰 따옴표로 배열을 확장 한 다음 매개 변수

LCOV_INPUT_FILES+=(-a "$FILENAME") 

등을 저장하는 배열을 사용할 수 있습니다

lcov "${LCOV_INPUT_FILES[@]}" -o ... 
+0

우수함! 평가판이 작동했습니다! 덕분에 –

+1

@ xavier.seignard : 배열도 잘 작동하며 훨씬 안전합니다. – choroba

+0

배열 옵션에 대한 권장 사항 인'eval'은 해결할 수있는 많은 문제를 만드는 경향이 있지만 배열은 이런 종류의 일을 위해 견고하게 작동합니다. –

관련 문제