나는 리눅스 명령을 만났다 builtin cd
.
명령 builtin cd
과 의 차이점은 무엇입니까 cd
?
사실, 그 차이점에 대해 조사했지만, 이것에 대해 놀랍고도 중요한 설명을 찾을 수 없었습니다.
답변
이 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
답변
대부분의 경우 차이가 없습니다 (그러나 아래 참조). 이 cd
명령은 모든 쉘에 내장 된 명령입니다. 외부 명령이 호출 쉘의 환경을 변경할 수 없으므로 작업 디렉토리를 변경하면 환경이 변경 되므로 내장 1 이어야 합니다.
bash
명령 builtin
힘은 쉘이 사용하는 내장 명령의 버전, 같은 이름을 사용할 수 쉘 기능, 별명, 또는 외부 명령이있을 수있다하더라도.
이 경우 됩니다 이름으로 쉘 기능을 예 cd
, 다음 builtin cd
것 없는 저를 호출합니다. 사용 builtin cd
하면 사용자가 셸 함수 또는 별칭을 통해 추가 한 오버로드 된 기능을 무시합니다.
예:
cd
내장 명령 프롬프트를 업데이트하는 기능에 의해 오버로드 할 수있다 :
cd() {
builtin cd "$@" && PS1=$(__update_prompt)
}
여기서 __update_prompt
문자열을 출력하는 다른 사용자 제공 함수가 있습니다.
builtin cd
함수의 재귀 적 함수를 호출하지 않을 것입니다. builtin cd
이 함수가 활성화 된 쉘에서 사용하면 추가로 함수를 호출하지 않습니다.
1 외부 cd
명령 (macOS, 그리고 나는 솔라리스)을 가진 Unices가 있습니다 . 쉘의 작업 디렉토리를 변경할 수없는 이 명령의 목적 은 사용 가능한 cd
외부 유틸리티 중 하나로 나열되는 POSIX 표준을 만족시키는 cd
것입니다 ( “특별 내장 유틸리티”중 하나가 아님). . 또한 작업 디렉토리를 주어진 디렉토리로 변경할 수 있는지 여부를 테스트하는 역할을 합니다 .