PATH의 틸드(~)가 HOME을 가리키지 않을 수 있음

3 hours ago 3

export PATH="$PATH:~/.local/bin/"처럼 따옴표 안에 ~를 넣으면 홈 디렉터리로 확장되지 않고, PATH에 문자 그대로 남음 이 PATH 항목은 홈 디렉터리가 아니라 현재 디렉터리 기준 ./~/.local/bin/ 을 가리키며, 해당 위치의 실행 파일을 찾아 실행할 수 있음 안전하게 의도한 경로를 추가하려면 export PATH="$PATH:$HOME/.local/bin/" 처럼 $HOME을 사용하면 됨 따옴표 없는 export PATH=$PATH:~/.local/bin은 Bash와 Zsh에서 틸드 확장이 작동하지만, 공백이 변수 할당을 깨뜨릴 수 있어 이에 의존하는 방식은 취약함 PATH에 ~가 남아 있는지 확인하고, 발견되면 .bashrc, .zshrc, .profile의 해당 설정을 $HOME 사용 방식으로 수정해야 함 따옴표 속 틸드와 실제 실행 경로 에이전트 샌드박싱 도구 nono를 사용하던 중 PATH entries the sandbox can write to: ~/.local/bin/ 경고가 나타나면서 이 문제를 발견함 .bashrc나 .zshrc에 export PATH="$PATH:~/.local/bin/"을 넣어도 ~는 $HOME으로 확장되지 않음 Bash 문서에 따르면 틸드 확장은 따옴표로 감싸지 않은 틸드 접두사에 적용됨 변수 할당에서는 첫 = 뒤나 각 : 바로 뒤에 있는, 따옴표로 감싸지 않은 틸드 접두사도 확장함 따라서 PATH에 들어간 ~/.local/bin/은 /home/<user>/.local/bin/이 아니라 현재 디렉터리 아래의 ./~/.local/bin/ 을 가리킴 재현 예제에서는 ./~/.local/bin/ 디렉터리를 만들고, hello를 출력하는 C 프로그램을 GCC로 컴파일해 그 안에 kek 실행 파일을 배치함 PATH="~/.local/bin/" kek를 실행하자 hello가 출력됨 홈 디렉터리는 관여하지 않았으며, 현재 디렉터리 아래의 실행 파일을 찾아 실행함 PATH 점검과 수정 echo "$PATH" | grep -- '~' 로 PATH에 틸드가 들어 있는지 빠르게 확인할 수 있음 항목별로 나누어 보려면 echo "$PATH" | tr ':' '\n' | grep '~'를 실행함 결과가 출력되면 .bashrc, .zshrc, .profile의 관련 설정에서 ~를 $HOME으로 교체함 export PATH="$PATH:$HOME/.l...

Read Entire Article