~ $PATH 변수에서 루트 폴더를 무시합니다.

~ $PATH 변수에서 루트 폴더를 무시합니다.

컨테이너에서 Alpine Linux를 사용하고 있습니다. ENV PATH="~/.local/bin:$PATH" \내 Dockerfile에는

쉘에 로그인하면 성공적으로 ls ~/.local/bin동일 하게 ls /root/.local/bin대상 바이너리가 있습니다.

그러나 바이너리를 직접 호출하고 있습니다. 그렇지 않으면 which mybin작동하지 않습니다. 명시적으로 추가하면 /root/.local/bin괜찮습니다.

~/.local/binand 가 /root/.local/bin동일하기 때문에 왜 이런 일이 발생하는지 잘 모르겠습니다 .

어떤 아이디어가 있나요? 감사해요!

편집하다:

중복된 링크를 통해 무슨 일이 일어나고 있는지에 대한 통찰력을 얻을 수 있었지만 그것이 주된 이유는 아니라는 것을 알았습니다. Dockerfile ENV지침이 셸 확장을 수행하지 않기 때문에 따옴표를 제거해도 여전히 작동하지 않습니다 .

작동하는 것처럼 보이는 유일한 방법은 지시어에서 export &&사용하는 것 입니다 CMD.

또한 지침을 $HOME준수 하지 않습니다 .ENV

답변1

$HOME어떤 셸을 사용하고 있는지는 확실하지 않지만 bash라고 가정하면 대화형 명령줄 이외의 다른 곳에서는 ~사용하는 것이 안전하지 않다는 점을 지정해야 합니다 .~

스크립트 내부의 일부 위치 ~도 작동할 수 있지만 변수 내부에서 정의하면 경험한 것처럼 예상치 못한 결과가 발생할 수 있습니다.

$PATH내용이 무엇인지 확인하기 위해 다시 에코할 수도 있습니다 .

echo $PATH

~/.local/bin현재 구현에서는 말 그대로 확장 되지 않고 경로가 포함된다는 것을 알 수 있습니다 ./root/.local/bin~

관련 정보