쉘 내장 기능이 실제로 해당 경로에서 프로그램을 실행합니까?

쉘 내장 기능이 실제로 해당 경로에서 프로그램을 실행합니까?

여기에 태그된 답변을 읽고 있습니다.내장 명령과 비 내장 명령의 차이점은 무엇입니까?

여기서 그는 이렇게 말합니다.

내장 명령은 다른 프로그램을 로드하고 실행하라는 요청으로 해석하는 것이 아니라 쉘이 자체적으로 실행하는 단순한 명령입니다. 여기에는 두 가지 주요 효과가 있습니다. 첫째, 프로그램을 로드하고 실행하는 데 시간이 걸리기 때문에 일반적으로 속도가 더 빠릅니다. 물론 명령 실행 시간이 길어질수록 전체 실행 시간에 비해 로드 시간이 덜 중요해집니다.

cd이는 우리가 쉘 내장 명령(예: or ) 을 실행할 때 echo쉘(bash라고 가정)이 이를 cd우리가 얻은 경로(/usr/bin/cd)를 사용하여 프로그램을 실행하는 것과 다르게 해석한다는 것을 의미합니까 which cd?

나는 우리가 실행한 모든 명령이 해당 프로그램을 실행할 것이라고 생각했을 것입니다. 이 답변을 보니 혼란스러웠습니다.

쉘이 프로그램이나 파일을 실행하지 않는 경우에도 which cd프로그램 경로가 계속 반환되는 이유는 무엇입니까? 이것은 우리가 echo hicommand를 실행할 때 env 변수의 경로를 검색하여 PATH이름으로 프로그램을 실행한다는 것을 의미합니까 echo?

이것을 설명해주세요....

답변1

쉘은 어떤 유틸리티가 내장되어 있는지 알고 있습니다.

쉘은 bash다음 단계를 사용하여 명령을 찾습니다(별명 확장을 수행한 후).

  1. 명령에 슬래시가 포함되어 있지 않은 경우
    1. 명령이 쉘 함수인 경우 이 함수가 호출됩니다.
    2. 그렇지 않고 내장된 명령에 해당하면 해당 명령이 사용됩니다.
    3. 그렇지 않으면 쉘은 $PATH해당 이름을 가진 실행 파일을 검색하고 발견되면 실행합니다.
  2. 명령에 슬래시가 포함되어 있으면 지정된 파일이 실행됩니다.

이는 셸이 실행 파일을 검색하는 유일한 시간 $PATH은 명령에 슬래시가 포함되어 있지 않고, 셸 기능이 아니며, 내장 유틸리티가 아닌 경우라는 것을 의미합니다. 또한 쉘이 bash실행되지 않습니다.물리적주어진 명령이 해시된 경우 디렉토리가 검색됩니다( 참조 help hash) bash.

관련 정보