의 근거 /
POSIX PATH 규칙의
규칙은 bash에서 실행하기 위해 실행 파일 또는 스크립트 이름 앞에 ./ (점 슬래시)가 필요한 이유는 무엇입니까?하지만 왜 이것이 좋은 디자인이라고 생각하는지 자세히 설명하고 싶습니다.
먼저 명시적인 정식 버전은 다음과 같습니다.
- 경로가 포함되어있는 경우
/
(예를 들어 ./someprog
, /bin/someprog
,./bin/someprog
) : CWD를 사용하고, PATH는 아니다
- 경로에
/
(예 someprog
:)가 포함되지 않은 경우 : PATH가 사용되고 CWD가 없습니다
이제 다음을 실행한다고 가정하십시오.
someprog
검색 :
그런 다음 /bin/someprog
배포판에서 실행하려면 다음을 수행 하십시오.
someprog
때로는 작동하지만 다른 관련없는 someprog
프로그램 이 포함 된 디렉토리에있을 수 있기 때문에 실패 할 수도 있습니다 .
따라서, 이것이 신뢰할 수 없다는 것을 곧 알게 될 것이며, PATH를 사용하려고 할 때 항상 절대 경로를 사용하게되어 PATH의 목적을 상실하게됩니다.
PATH에 상대 경로를 갖는 것이 정말 나쁜 이유이기도합니다. 당신을 보고 있습니다node_modules/bin
.
반대로, 다음을 실행한다고 가정하십시오.
./someprog
검색 :
그런 다음 방금 someprog
git 저장소에서 스크립트 를 다운로드하고 CWD에서 스크립트 를 실행하려는 경우 배포판에 다음이 있기 때문에 이것이 실제로 실행될 프로그램인지 확신 할 수 없습니다.
/bin/someprog
작년 크리스마스 이후에 술을 너무 많이 마신 후 설치 한 일부 패키지의 경로입니다.
따라서 다시 한 번, CWD를 기준으로 항상 로컬 스크립트를 실행하여 전체 경로를 사용하여 실행중인 것을 알 수 있습니다.
"$(pwd)/someprog"
그것은 또한 매우 성가시다.
당신이 생각해보고 싶은 또 다른 규칙은 다음과 같습니다.
상대 경로는 PATH 만 사용하고 절대 경로는 CWD 만 사용합니다.
그러나 다시 한번 이것은 사용자가 항상 경로가 아닌 스크립트에 절대 경로를 사용하도록 "$(pwd)/someprog"
합니다.
/
경로 검색 규칙은 대한 문제에 대한 해결책을 기억하는 간단한을 제공합니다 :
- 슬래시 : 사용하지 마십시오
PATH
- 슬래시 없음 : 사용 만
PATH
현재 디렉토리의 파일이 ./somefile
또는 로 표현 될 수 있다는 사실에 의존하여 실행중인 내용을 항상 쉽게 알 수 somefile
있으므로 그 중 하나에 특별한 의미를 부여합니다.
때때로, 당신이 검색 할 수있는 약간 짜증나는 some/prog
상대에 대한 PATH
,하지만이에 온건 솔루션을 볼 수 없습니다.