다음을 수행하는 쉘 스크립트가 있는데 Dockerfile에서 이를 수행하고 싶습니다. 이 작업을 수행하는 방법을 아는 사람이 있나요? 명령을 실행할 수 있지만 sed
for 루프에는 운이 없습니다.
org="$(cat org-template.yml)"
for i in {1..10}
do
temp=$org
temp="${temp/ENDPOINT/$endpoint}"
temp="${temp/AUTH_TOKEN/$access_token}"
temp="${temp/LABEL_TOKEN/$i}"
final_template="${final_template}\n${temp}"
done
final_template="${final_template//
/\\n}"
sed "s#ORGANIZATIONREQUESTS#${final_template}#g" ./performance-tests.yml > /tmp//performance-tests.yml
답변1
이러한 종류의 문제에 대한 일반적인 해결책은 Dockerfile과 함께 셸 스크립트를 넣고 지침을 사용하여 COPY
이를 컨테이너에 복사한 다음 RUN
컨테이너에 복사하는 것입니다.
유일한 대안은 전체 스크립트를 적절하게 이스케이프된 인수로 전달하는 것입니다 . 그러면 읽기가 좋지 않습니다. 어쨌든 컨테이너에 bash -c
있어야 합니다 . org-template.yml
따라서 솔직히 이 두 파일을 컨테이너에 복사하는 것이 가장 간단하고 유지 관리가 쉬운 솔루션인 것 같습니다.
또한 YAML에 대한 사항은 다음과 같습니다. YAML을 처리하려면 셸 교체를 사용하는 것보다 적절한 yaml 도구를 사용하는 것이 좋습니다. sed
유틸리티가 yq
더 안전하고 나중에 손상되지 않습니다.