2016-09-26 5 views
0

awscreds.template에 API 자격 증명을 삽입하는 스크립트를 작성하려고합니다. 그러나 Secret에는 특수 문자가 포함되어 있습니다. 예를 들어 :AWS API 자격 증명을 삽입하는 스크립트

AWSAccessKeyId=AKIAJ5YhzvVUZnPTBVRA 
AWSSecretKey=fRUZnUVUZnUvYhzvJVpwyn/xN3Oo0l3icqRy0//+ 

내 스크립트 요청 : 다음

echo "Entre the Access Key, followed by an ENTER:" 
read access 
echo "Entre the Secret Key, followed by an ENTER:" 
read secret 

그리고 파일에 삽입 : 그러나

sed -i '/AWSAccessKeyId=/s/$/'$access'/' awscreds.template 

sed -i '/AWSSecretKey=/s/$/'$secret'/' awscreds.template 

, 나는 다음을 얻을 스크립트를 실행할 때 :

sed: -e expression #1, char 44: unknown option to `s' 

약간의 연구를 한 후, ''을 사용하여 입력을 제한했지만 여전히 동일한 알람이 발생합니다. 하지만 왜 아직도이 오류가 발생합니까?

+0

어떤 버전의 'sed'를 사용하고 있습니까? 즉'sed --version'의 결과를 출력합니다. 'GNU sed version 4.2.1'에서 잘 작동합니다. – Inian

+0

좋은 질문입니다. AMI에 미리 설치되어 있습니다 : ** GNU sed version 4.2.1 ** – SSF

+0

당신에게 효과가 없었던'secret'의 가치는 무엇입니까? – Inian

답변

0

문제는 의 deliminator이을 나오지도했다. 신임장에는 /이 포함되어 있으며 sed 문에도 사용되었습니다. 그래서 나는 자격 증명을 파일에 되풀이했다. 나는이 일을하는 가장 우아한 방법이 아니라는 것을 알고 있습니다. 그러나 그것은 잘 돌아갔다.

echo "AWSAccessKeyId=$access" > awscreds.template 
echo "AWSSecretKey=$secret" >> awscreds.template 
2

AWSSecretKey 값은 / 문자를 포함하며이 문자는 sed 명령에서 구분 기호로 사용됩니다.

sed 구분 구분 기호를 다른 문자로 바꾸십시오.

예를 들면 :

sed -i '/AWSAccessKeyId=/s~$~'"$access"'~' awscreds.template 
sed -i '/AWSSecretKey=/s~$~'"$secret"'~' awscreds.template 
+0

와우! 좋은 관찰! 비슷한 선상에서 생각하고 있었고, 단지 자리를 잡았습니다! – Inian

+0

하지만 다른 문자로 바꾸면 암호가 변경되지 않아 결과적으로 AWS 클라우드 검색에 측정 항목이 전송되지 않습니다. – SSF

+0

비밀은 바뀌지 않을 것입니다, 당신은 단지 sed's 명령 구분자를 대체합니다. 이 문제에 대한 자세한 내용은 [여기] (http://stackoverflow.com/questions/9366816/sed-unknown-option-to-s)를 참조하십시오. – SLePort

1

당신은 나오지도 임의의 문자열에 작동하지 않을 수 있기 때문에 견고이 작업을 수행 할 AWK를 사용해야합니다. 이 입력 파일에서 문자열이나 대체 텍스트를 작동합니다

$ secret='a&b/\t=\1' awk '/^AWSSecretKey=/ { sub(/=.*/,"="); $0=$0 ENVIRON["secret"] } 1' file 
AWSSecretKey=a&b/\t=\1 
관련 문제