강제 PATH 검색 유형 관련 문제

강제 PATH 검색 유형 관련 문제

배쉬입니다. 물고기도 비슷하게 행동합니다.

$ 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는 확장되지 않으며 표시 되지 않습니다 .footype -P foofoopytype -P pypython/usr/bin/python

답변2

py무슨 일이 일어나고 있는지 쉘이 각 디렉토리에 지정된 바이너리 파일을 찾고 있지만 PATH아무것도 찾을 수 없다는 것입니다.

type -P별칭이나 함수를 해석하지 않습니다. 'file' 유형이 아닌 동일한 이름을 가진 다른 사용 가능한 명령을 무시하고 지정된 이름에 대한 경로를 검색합니다.

type -p(and에는 추가 미묘함이 있습니다 type -P. 해시를 고려하므로 해시가 있으면 해시를 보지 않고 표시합니다 PATH. 하지만 여기서는 다루지 않습니다.)

관련 정보