내장 cd와 cd 명령의 차이점은 무엇입니까?

내장 cd와 cd 명령의 차이점은 무엇입니까?

나는 Linux 명령을 발견했습니다 builtin cd.

명령 builtin cd과 의 차이점은 무엇입니까 cd?

사실 이 차이에 대해 몇 가지 조사를 해봤지만 이에 대한 의미 있고 의미 있는 설명을 찾을 수 없었습니다.

답변1

cd명령은 내장 명령이므로 일반적 builtin cd으로 와 동일한 작업을 수행합니다 cd. 그러나 cd함수나 별칭으로 재정의하면 차이가 있는데, 이 경우 cd함수/별칭은 호출되지만 builtin cd디렉터리는 계속 변경됩니다. 즉, 내장된 접근성은 소멸되더라도 그대로 유지됩니다. 기능으로.)

예를 들어:

user:~$ cd () { echo "I won't let you change directories"; }
user:~$ cd mysubdir
I won't let you change directories
user:~$ builtin cd mysubdir
user:~/mysubdir$ unset -f cd  # undefine function

또는 별칭을 사용하세요.

user:~$ alias cd='echo Trying to cd to'
user:~$ cd mysubdir
Trying to cd to mysubdir
user:~$ builtin cd mysubdir
user:~/mysubdir$ unalias cd  # undefine alias

을 사용하는 것은 특정 작업을 수행하는 함수를 정의하는 좋은 방법 builtin이기도 합니다.cd그리고디렉토리 변경( cd이 디렉토리에서 호출하면 무한 재귀로 함수가 다시 호출되기 때문입니다.)

예를 들어:

user:~ $ cd () { echo "Changing directory to ${1-home}"; builtin cd "$@"; }
user:~ $ cd mysubdir
Changing directory to mysubdir
user:~/mysubdir $ cd
Changing directory to home
user:~ $ unset -f cd  # undefine function

답변2

대부분의 경우에는 차이가 없습니다(아래 참조). 이 cd명령은 모든 쉘에 내장된 명령입니다. 외부 명령은 쉘이 호출되는 환경을 변경할 수 없으므로 내장 1이 필요합니다. 작업 디렉토리를 변경하면 해당 환경이 변경됩니다.

bash명령은 builtin동일한 이름을 가진 쉘 함수, 별칭 또는 외부 명령이 있더라도 쉘이 명령의 내장 버전을 사용하도록 강제합니다.

일부 경우에cd를 들어 ,builtin cd아니요그냥 그렇게 부르세요. 사용은 builtin cd사용자가 셸 함수나 별칭을 통해 추가할 수 있는 오버로드된 기능을 우회합니다.

예:

내장 명령은 cd힌트를 업데이트하는 함수로 인해 오버로드될 수 있습니다.

cd() {
    builtin cd "$@" && PS1=$(__update_prompt)
}

그 중에는 __update_prompt문자열을 출력하는 다른 사용자 제공 함수도 있습니다.

함수 는 builtin cd재귀적으로 호출되지 않습니다. 함수가 활성화된 쉘에서 사용될 때는 builtin cd함수가 호출되지 않습니다 .


1 외부 명령이 있는 Unices가 있습니다 cd(macOS, 그리고 저는 Solaris를 믿습니다). 이 명령의 목적은할 수 없다cd쉘의 작업 디렉토리를 변경하는 것은 사용 가능한 외부 유틸리티 중 하나를 나열하는 POSIX 표준을 충족하기 위해 수행될 수 있습니다 ( cd"특수 내장 유틸리티" 중 하나가 아님). 또한 작업 디렉터리가 지정된 디렉터리로 변경되었는지 확인하는 테스트로도 작동합니다.가능할 것이다.

관련 정보