배쉬입니다. 물고기도 비슷하게 행동합니다.
$ which python
/usr/bin/python
$ alias py=python
$ type py
py is aliased to `python'
그런 다음 실행은 아래에서 볼 수 있는 것과 유사한 방식으로 type -P py
예상한 대로 아무것도 인쇄하지 않습니다 ./usr/bin/pyton
$ type ls
ls is aliased to `ls --color=auto'
$ type -P ls
/bin/ls
이 옵션에 대한 설명서 -P
는 다음과 같습니다.
-P force a PATH search for each NAME, even if it is an alias,
builtin, or function, and returns the name of the disk file
that would be executed
/usr/bin
(디렉토리 python
)가 에 있음 을 확인했습니다 PATH
.
여기서 무슨 일이 일어나고 있는 걸까요?
답변1
이것:
별칭이라도 모든 이름에 대해 강제로 경로 검색을 수행합니다.
이는 bash가 별칭을 확장한 다음 확장된 명령을 검색한다는 의미는 아닙니다. 즉 , 명령 foo
과 별칭이 있으면 별칭이 마스킹하더라도 명명된 명령을 계속 찾습니다 . 따라서 bash는 확장되지 않으며 표시 되지 않습니다 .foo
type -P foo
foo
py
type -P py
python
/usr/bin/python
답변2
py
무슨 일이 일어나고 있는지 쉘이 각 디렉토리에 지정된 바이너리 파일을 찾고 있지만 PATH
아무것도 찾을 수 없다는 것입니다.
type -P
별칭이나 함수를 해석하지 않습니다. 'file' 유형이 아닌 동일한 이름을 가진 다른 사용 가능한 명령을 무시하고 지정된 이름에 대한 경로를 검색합니다.
type -p
(and에는 추가 미묘함이 있습니다 type -P
. 해시를 고려하므로 해시가 있으면 해시를 보지 않고 표시합니다 PATH
. 하지만 여기서는 다루지 않습니다.)