![docker exec에서 "내보내기"가 작동하지 않는 이유는 무엇입니까?](https://linux55.com/image/141678/docker%20exec%EC%97%90%EC%84%9C%20%22%EB%82%B4%EB%B3%B4%EB%82%B4%EA%B8%B0%22%EA%B0%80%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
/etc/profile.d/custom.sh
및 에서 변수를 내보냈 습니다 ~/.bashrc
. 실행하면 환경에서 사용할 수 있습니다 docker exec -i CONT_ID /bin/bash
. 그러나 다른 명령을 실행하면 명령 환경에서 사용할 수 없습니다. 예, 그래서 이것을 시도했습니다:
docker exec -i "$MYCONTNAME" /bin/bash -c "source /etc/profile.d/custom.sh; echo $MYVAR"
이것은 작동하지 않습니다. 나는 심지어 시도했다:
docker exec -i "$MYCONTNAME" /bin/bash -c "export Y=123; echo Y=$Y"
docker exec -i "$MYCONTNAME" /bin/bash -c "export Y=123 && echo Y=$Y"
그러나 그것들도 작동하지 않습니다. 추가할 수는 있지만 ing 변수가 있는 쉘 스크립트 파일에 -e VARi=VALi
있으므로 ( ) export
를 사용하여 작동하게 할 수 있는 방법이 있습니까 ?/bin/bash
source /etc/profile.d/custom.sh
답변1
$MYVAR
지휘 중
docker exec -i "$MYCONTNAME" /bin/bash -c "source /etc/profile.d/custom.sh; echo $MYVAR"
실행 전에 확장됩니다 /bin/bash -c
(큰따옴표로 묶여 있기 때문).
대신 작은따옴표를 사용하세요.
docker exec -i "$MYCONTNAME" /bin/bash -c 'source /etc/profile.d/custom.sh; echo $MYVAR'
또는 (테스트되지 않음),
docker exec -i "$MYCONTNAME" /usr/bin/env BASH_ENV=/etc/profile.d/custom.sh /bin/bash -c 'echo $MYVAR'
BASH_ENV
비대화형 셸(예: )을 시작할 때 설정 하면 bash -c
셸이 명령을 실행하기 전에 이 변수가 가리키는 파일을 가져옵니다.