2017-05-08 3 views
0

travis-ci에서 환경 변수를 가져오고 런타임시 파일 내용을 sed을 사용하여 바꾸려고합니다.sed를 사용하여 Travis-CI의 .coveralls.yml 구성 내용을 대체 할 때 문제가 발생했습니다.

문제의 파일에는 다음이 포함 환경 변수를 당기지 않는 선이 작동 명령에 sed -i 's/COVERALLS_TOKEN/ASDF/g' .coveralls.yml을 사용하지만, 그 이상 sed -i 's/COVERALLS_TOKEN/$COVERALLS_TOKEN/g' .coveralls.yml 같은 트래비스-CI 구성 뭔가 들고 우분투 시스템에서

service_name: travis-ci 
repo_token: COVERALLS_TOKEN 

, .

정말로 나를 없애 버리는 이유는 오늘 .travis.yml 항목이 작동하는 프로젝트가 있지만이 상황에 적응하는 것입니다.

원래 구현은 오늘날에게

sed -ri 's/^MY_ENV_VAR=/MY_ENV_VAR='$MY_ENV_VAR'/' .env 

적응 (작동하지 않습니다)

sed -ri 's/^COVERALLS_TOKEN/$COVERALLS_TOKEN/' .coveralls.yml 
+0

가능 [sed의 환경 변수 대체]의 복제본 (http://stackoverflow.com/questions/584894/environment-variable-substitution-in-sed) –

답변

1

명령에 두 가지 문제점이 있습니다. 첫째, ^은 행의 맨 처음 부분에서 발생하는 COVERALLS_TOKEN과 만 일치 함을 의미합니다. YAML 파일의 줄 시작 부분에 있지 않으므로 일치하지 않으며 sed 명령은 아무 작업도 수행하지 않습니다.

둘째, 작은 따옴표 안에 변수 대체가 없습니다.

는 그래서 ^ 제거를 두 번 대신 한 사람의 따옴표 사용

sed -ri "s/COVERALLS_TOKEN/$COVERALLS_TOKEN/" .coveralls.yml 

일부 노트 :

  1. 변수 $COVERALLS_TOKEN는 당신이 sed을 실행시 쉘에서 설정해야합니다 명령.
  2. $COVERALLS_TOKEN의 값에 대체 명령에 사용하는 구분 기호가 있으면 대체가 구문 오류와 함께 실패합니다. 위의 명령은 /을 사용하지만 필요에 따라 변경할 수 있습니다. 토큰 문자열에없는 것을 선택하십시오.
  3. 토큰 값은 YAML 파일의 어떤 식으로도 인용되지 않습니다. 일반적으로 그 괜찮아요,하지만 가치의 이상한 문자가있는 경우, 당신은뿐만 아니라 대체 명령의 대체 측에 추가하여 YAML에 따옴표를 넣어해야합니다

    sed -ri "s/COVERALLS_TOKEN/'$COVERALLS_TOKEN'/" .coveralls.yml 
    
+0

감사합니다. 이것은 내가 필요한 세부 사항이었습니다. 이제 작동 중입니다. – Webnet

0

작은 따옴표는 변수 확장을 억제 작동합니다.

+0

당신은'sed -ri 's/^ COVERALLS_TOKEN/" $ COVERALLS_TOKEN "/ '.coveralls.yml'? 불행히도 그것은 작동하지 않습니다. 나는 또한 "sed -ri 's/^ COVERALLS_TOKEN /'"$ COVERALLS_TOKEN " '/'.coveralls.yml'에"possible duplicate "플래그를 주려고 시도했다. – Webnet

+0

예,''/ COVERALLS_TOKEN/' "$ COVERALLS_TOKEN"'/ ''을 제안합니다. 그 명령에 어떤 문제가 있습니까? –

+0

그건 작동하지 않습니다 – Webnet