이 코드를 보세요:
find /Api -mindepth 1 -maxdepth 1 |
while read DependencyPath;
do
DependencyName=$(basename $DependencyPath);
DependencyOrganization="Api";
echo $DependencyOrganization - $DependencyName;
done
출력은 다음과 같습니다.
- Courses
- Media
- Orders
- Blog
첫 번째 변수( ) DependencyName=$(basename $DependencyPath);
는 설정되지만 두 번째 변수( DependencyOrganization="Api"
)는 설정되지 않습니다.
왜 설정되어 있지 않은지 모르겠습니다. 나는 또한 사용해 보았습니다 bash -x /script
. 이것은 로그입니다:
+ find /Api -mindepth 1 -maxdepth 1
+ read DependencyPath
++ basename /Api/Courses
+ DependencyName=Courses
+ DependencyOrganization=Api
+ echo - Courses
- Courses
+ read DependencyPath
++ basename /Api/Media
+ DependencyName=Media
+ DependencyOrganization=Api
+ echo - Media
+ read DependencyPath
- Media
나도 시도해 보았지만 DependencyOrganization=$(echo "Api")
작동하지 않습니다.
어떻게 해야 합니까?
고쳐 쓰다
컨테이너 안에서 달리고 있어요. bash에서 직접 실행 docker exec -it container_name bash
하면 find -mindepth 1 -maxdepth 1 -type d | while read temp; do name=hi; echo $name; done
작동합니다. 그런데 파일로 저장하고 실행하면 ./script
빈칸으로 출력됩니다.
답변1
여기에 문제가 있습니다.
우리의 스크립트(빌드 스크립트)는 동적으로 생성됩니다. 스크립트 생성 프로세스의 단계는 다음과 같습니다.
envsubst < /path/to/script/template > /path/to/generated/script
envsubst
이는 스크립트 템플릿 내에서 사용되는 모든 변수가 null 값으로 대체됨을 의미합니다 .
예를 들어, 이 콘텐츠가 있으면 생성된 스크립트로 Name=John; echo $John;
변환됩니다 .Name=John; echo ;
우리가 생성한 스크립트는 도커 이미지 내에서 실행되므로 이것이 문제인지는 알 수 없습니다. 일부 매개변수를 동적으로 설정하는 스크립트 템플릿이라고 가정해 보겠습니다. 그러나 조사를 해보니 문제가 있다는 것이 분명해졌습니다 envsubst
.
그러므로 다음과 같이 사용해야 합니다.
# This line is for envsubst. It won't be expanded, since it's single quotes
Name='$Name'
envsubst < /path/to/script/template > /path/to/generated/script